atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
lafe @ ウィキ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
lafe @ ウィキ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
lafe @ ウィキ
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • lafe @ ウィキ
  • TabCtrlItem

lafe @ ウィキ

TabCtrlItem

最終更新:2010年05月18日 17:19

lafe

- view
管理者のみ編集可
class CTabCtrlItem {
public:
	// Data members
	BYTE		m_fsState;
	CString 	m_strItem;		// string on button
	CRect		m_rcItem;
	int 		m_nImgIndex;	// image list index
	DWORD_PTR	m_dwUser;		// user's data 
 
private:
	// Constants
	enum { s_kcxIconGap = 2 };
 
public:
	// Constructor/destructor
	CTabCtrlItem(const CString &strBtn = CString(), int nImgIndex = -1, DWORD_PTR dwUser = 0, BYTE fsState = TCISTATE_ENABLED)
		: m_fsState(fsState)
		, m_strItem(strBtn)
		, m_nImgIndex(nImgIndex)
		, m_dwUser(dwUser)
	{
		m_rcItem.SetRectEmpty();
	}
 
 
	// Attributes
	bool ModifyState(BYTE fsRemove, BYTE fsAdd)
	{
		BYTE fsStateOld = m_fsState;
 
		m_fsState = (m_fsState & ~fsRemove) | fsAdd;
 
		if ( (fsStateOld & TCISTATE_SELECTED || fsStateOld & TCISTATE_MSELECTED)
		   && (fsRemove == TCISTATE_HOT || fsAdd == TCISTATE_HOT) ) 	// selected, no need to update
			return false;
		else
			return m_fsState != fsStateOld;
	}
 
 
	// Methods
	void Update(CDCHandle dc, HIMAGELIST hImgList, bool bAnchorColor, CTabSkin *pTabSkin)
	{
		if (m_fsState & TCISTATE_HIDDEN)
			return;
 
		int    cxIcon		= 0, cyIcon = 0;
		int    cxIconOffset = 0;
 
		if (m_nImgIndex != -1) {
			::ImageList_GetIconSize(hImgList, &cxIcon, &cyIcon);
			cxIconOffset += cxIcon + s_kcxIconGap * 2;
		}
 
		bool   bHot 		= (m_fsState & TCISTATE_HOT) != 0;
		bool   bPressed 	= (m_fsState & TCISTATE_PRESSED) != 0;
 
		CPoint ptOffset(0, 0);
 
		if (m_fsState & TCISTATE_SELECTED) {							// now selected
			Update_Selected(dc, pTabSkin, bHot, bPressed);
			ptOffset += CPoint(2, 2);
		} else if (m_fsState & TCISTATE_MSELECTED) {					// multi-selected
			Update_MultiSel(dc, pTabSkin, bHot, bPressed);
			ptOffset += CPoint(2, 2);
		} else {														// not selected
			Update_NotSel(dc, pTabSkin, bHot, bPressed, ptOffset);
		}
 
		_DrawText(dc, ptOffset + CPoint(cxIconOffset, 0), bAnchorColor, pTabSkin);
 
		if (m_nImgIndex != -1) {
			::ImageList_Draw(hImgList, m_nImgIndex, dc, m_rcItem.left + ptOffset.x + s_kcxIconGap,
							 m_rcItem.top  + (m_rcItem.Height() - cyIcon) / 2 + ptOffset.y / 2, ILD_TRANSPARENT);
		}
	}
 
 
private:
	void Update_Selected(CDCHandle dc, CTabSkin *pTabSkin, BOOL bHot, BOOL bPressed)
	{
		if (bHot && bPressed) {
			//選択・スキンなし
			if (pTabSkin->IsVisible() == FALSE) {
				COLORREF crTxt = dc.SetTextColor(pTabSkin->m_colBtnFace);
				COLORREF crBk  = dc.SetBkColor(pTabSkin->m_colBtnHi);
				CBrush	 hbr( CDCHandle::GetHalftoneBrush() );
				dc.SetBrushOrg(m_rcItem.left, m_rcItem.top);
				dc.FillRect(m_rcItem, hbr);
				dc.SetTextColor(crTxt);
				dc.SetBkColor(crBk);
				dc.DrawEdge(m_rcItem, BDR_RAISEDINNER, BF_RECT);
			} else {
				pTabSkin->DrawSkinCur(dc.m_hDC, m_rcItem);
			}
		} else {														// ignored hot
			if (pTabSkin->IsVisible() == FALSE) {
				TCTRACE( _T(" draw selected(checked) button\n") );
				COLORREF crTxt = dc.SetTextColor(pTabSkin->m_colBtnFace);
				COLORREF crBk  = dc.SetBkColor(pTabSkin->m_colBtnHi);
				CBrush	 hbr( CDCHandle::GetHalftoneBrush() );
				dc.SetBrushOrg(m_rcItem.left, m_rcItem.top);
				dc.FillRect(m_rcItem, hbr);
				dc.SetTextColor(crTxt);
				dc.SetBkColor(crBk);
				dc.DrawEdge(m_rcItem, EDGE_SUNKEN, BF_RECT);
			} else {
				pTabSkin->DrawSkinCur(dc.m_hDC, m_rcItem);
			}
		}
	}
 
 
	void Update_MultiSel(CDCHandle dc, CTabSkin *pTabSkin, BOOL bHot, BOOL bPressed)
	{
		if (pTabSkin->IsVisible() == FALSE) {
			if (bHot && bPressed)
				dc.DrawEdge(m_rcItem, BDR_RAISEDINNER, BF_RECT);
			else
				dc.DrawEdge(m_rcItem, EDGE_SUNKEN, BF_RECT);
		} else {
			pTabSkin->DrawSkinSel(dc.m_hDC, m_rcItem);
		}
	}
 
 
	void Update_NotSel(CDCHandle dc, CTabSkin *pTabSkin, BOOL bHot, BOOL bPressed, CPoint &ptOffset)
	{
		if (pTabSkin->IsVisible() == FALSE) {
			if (bHot && bPressed) {
				dc.DrawEdge(m_rcItem, BDR_RAISEDINNER, BF_RECT);		// hot
				ptOffset += CPoint(2, 2);								// sunk a little
			} else if (bHot && !bPressed) {
				dc.DrawEdge(m_rcItem, BDR_RAISEDINNER, BF_RECT);		// hot
			}
		} else {
			if (bHot && !bPressed) {
				pTabSkin->DrawSkinSel(dc.m_hDC, m_rcItem);
				//				ptOffset += CPoint(2, 2);
			} else {
				pTabSkin->DrawSkinNone(dc.m_hDC, m_rcItem);
			}
		}
	}
 
 
	// Implementation
	void _DrawText(CDCHandle dc, CPoint ptOffset, bool bAnchorColor, CTabSkin *pTabSkin)
	{
		COLORREF clr;
 
		if ( !(m_fsState & TCISTATE_ENABLED) )
			clr = pTabSkin->m_colDisable;
		else if (m_fsState & TCISTATE_INACTIVE)
			clr = bAnchorColor ? pTabSkin->m_colInActive : pTabSkin->m_colText;
		else
			clr = bAnchorColor ? pTabSkin->m_colActive : pTabSkin->m_colText;
 
		COLORREF clrOld = dc.SetTextColor(clr);
 
		CRect	 rcBtn(m_rcItem.left + ptOffset.x, m_rcItem.top + ptOffset.y, m_rcItem.right, m_rcItem.bottom);
		rcBtn.DeflateRect(2, 0);
 
		UINT	 uFortmat;
		int 	 nWidth = MtlComputeWidthOfText( m_strItem, dc.GetCurrentFont() );
 
		if ( nWidth > rcBtn.Width() )
			uFortmat = DT_LEFT | DT_END_ELLIPSIS;
		else
			uFortmat = DT_CENTER | DT_NOCLIP;
 
		if ( !(m_fsState & TCISTATE_ENABLED) ) {
			// disabled - draw shadow text shifted down and right 1 pixel (unles selected)
			CRect	 rcDisabled = rcBtn + CPoint(1, 1);
			COLORREF clrOld2	= dc.SetTextColor(pTabSkin->m_colDisableHi);
			dc.DrawText(m_strItem, -1, rcDisabled, DT_SINGLELINE | uFortmat | DT_VCENTER | DT_NOPREFIX);
			dc.SetTextColor(clrOld2);
		}
 
		dc.DrawText(m_strItem, -1, rcBtn, DT_SINGLELINE | uFortmat | DT_VCENTER | DT_NOPREFIX);
		dc.SetTextColor(clrOld);
	}
 
 
	void DrawHot(CDCHandle dc)
	{
		dc.DrawEdge(m_rcItem, BDR_RAISEDINNER, BF_RECT);
	}
 
 
	void DrawPressed(CDCHandle dc)
	{
		dc.DrawEdge(m_rcItem, EDGE_SUNKEN, BF_MIDDLE);
	}
 
 
	void DrawSelected(CDCHandle dc)
	{
		dc.DrawEdge(m_rcItem, EDGE_SUNKEN, BF_RECT);
	}
};
 
 
「TabCtrlItem」をウィキ内検索
LINE
シェア
Tweet
lafe @ ウィキ
記事メニュー
メニュー
  • トップページ

作成したソフトウェア
  • unDonut
    • 更新履歴
    • 既知のバグ
    • unDonutScript

  • ExpTabBar

  • SetDefaultAudioDevice

  • Proxydomo
    • 詳細
    • SSLフィルタリング
    • Chromium系列のブラウザでSSLフィルタリングが利用できない
    • Proxydomo - English edition

  • ImageArrangement

  • TTBase拡張
    • ファイルダイアログ拡張10
    • ChangeCaretColor

プログラムtip
  • C++
    • Tip



合計: -
今日: -
昨日: -


記事メニュー2
何かあれば【 こちら 】まで問い合わせください

更新履歴

取得中です。
人気記事ランキング
  1. Chromium系列のブラウザでSSLフィルタリングが利用できない
もっと見る
最近更新されたページ
  • 1938日前

    メニュー
  • 1938日前

    ExpTabBar
  • 1938日前

    ExpTabBar old
  • 2280日前

    Proxydomo
  • 3017日前

    Chromium系列のブラウザでSSLフィルタリングが利用できない
  • 3062日前

    FileDlgHack
  • 3097日前

    右メニュー
  • 3204日前

    proxydomo_detail
  • 3432日前

    Proxydomo - English edition
  • 3522日前

    SetDefaultAudioDevice
もっと見る
人気記事ランキング
  1. Chromium系列のブラウザでSSLフィルタリングが利用できない
もっと見る
最近更新されたページ
  • 1938日前

    メニュー
  • 1938日前

    ExpTabBar
  • 1938日前

    ExpTabBar old
  • 2280日前

    Proxydomo
  • 3017日前

    Chromium系列のブラウザでSSLフィルタリングが利用できない
  • 3062日前

    FileDlgHack
  • 3097日前

    右メニュー
  • 3204日前

    proxydomo_detail
  • 3432日前

    Proxydomo - English edition
  • 3522日前

    SetDefaultAudioDevice
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  2. MadTown GTA (Beta) まとめウィキ
  3. R.E.P.O. 日本語解説Wiki
  4. シュガードール情報まとめウィキ
  5. ソードランページ @ 非公式wiki
  6. AviUtl2のWiki
  7. ヒカマーWiki
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. Dark War Survival攻略
  10. 星飼いの詩@ ウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  6. 検索してはいけない言葉 @ ウィキ
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. 発車メロディーwiki
  9. オレカバトル アプリ版 @ ウィキ
  10. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. べりはぴ - ストグラ まとめ @ウィキ
  3. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  4. クロスボーン・ガンダムX1改 - 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  5. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
  6. ヴォイドカンパニー - アニヲタWiki(仮)
  7. 機体一覧 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  8. ガンダム・エアリアル(改修型) - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  9. コメント/雑談・質問 - マージマンション@wiki
  10. 危険度7 - 検索してはいけない言葉 @ ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.