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

lafe @ ウィキ

ComboBoxProxy

最終更新:2010年01月02日 23:17

lafe

- view
管理者のみ編集可
フラットコンボボックスを余所でも使うかもしれないので

// CComboBoxProxy.h
 
 
///////////////////////////////////////////////////////////////////////////////////////////
// CComboBoxProxy
 
class CComboBoxProxy
	: public CWindowImpl<CComboBoxProxy, CComboBox>
	, public CTrackMouseLeave<CComboBoxProxy>
{
private:
	enum			 { s_kcxyBorder = 2 };
	enum _ComboState { _comboNormal, _comboHot, _comboPressed };
 
	// Data members
	_ComboState	m_state;
	int			m_nDrawStyle;
	BOOL		m_bExistManifest;
 
public:
	// コンストラクタ
	CComboBoxProxy();
 
	bool	FlatComboBox_Install(HWND hWndCombo);
	void	FlatComboBox_UnInstall();
 
	void	SetDrawStyle(int nStyle);
 
public:
	// メッセージマップ
	BEGIN_MSG_MAP(CComboBoxProxy)
		MSG_WM_PAINT( OnPaint )
		CHAIN_MSG_MAP(CTrackMouseLeave<CComboBoxProxy>)
	END_MSG_MAP()
 
private:
	void	OnPaint(CDCHandle dc);
 
private:
	void	_DoComboPaint(CDCHandle dc);
 
	void	_DrawFlatThumb(CDCHandle &dc);
	void	_DrawFlatCombo(CDCHandle &dc, _ComboState state);
 
	CRect	_GetOriginalThumbRect();
	CRect	_GetFlatThumbInvalidateRect();
	CRect	_GetFlatComboInvalidateRect();
 
	void	_SetUseXPTheme(HWND hWnd, BOOL bUse);
 
};
 
 

// ComboBoxProxy.cpp
 
 
#include "ComboBoxProxy.h"

////////////////////////////////////////////////////////////////////////////////////////
// CComboBoxProxy
 
// コンストラクタ
CComboBoxProxy::CComboBoxProxy()
	: m_state(_comboNormal)
	, m_nDrawStyle(SKN_COMBO_STYLE_DEFAULT)
	, m_bExistManifest(TRUE)
{
}
 
bool CComboBoxProxy::FlatComboBox_Install(HWND hWndCombo)
{
	ATLVERIFY( SubclassWindow(hWndCombo) );
	return true;
}
 
 
void CComboBoxProxy::FlatComboBox_UnInstall()
{
	if ( IsWindow() ) {
		UnsubclassWindow();
	}
}
 
void CComboBoxProxy::SetDrawStyle(int nStyle)
{
	m_nDrawStyle = nStyle;
 
	if (nStyle == SKN_COMBO_STYLE_THEME && m_bExistManifest) {
		_SetUseXPTheme(m_hWnd, TRUE);
	} else {
		_SetUseXPTheme(m_hWnd, FALSE);
	}
}
 
 
/////////////////////////////////////////////////////////////////////////////////////
// メッセージマップ
 
void CComboBoxProxy::OnPaint(CDCHandle dc)
{
	if ( m_nDrawStyle == SKN_COMBO_STYLE_DEFAULT
	 || (m_nDrawStyle == SKN_COMBO_STYLE_THEME && !m_bExistManifest) ) {
		 // スタイルがデフォルトかテーマなのにmanifestファイルが存在しないとき
		 CRect	rc;
		 GetUpdateRect(&rc, FALSE);
 
		 ValidateRect(NULL);	// validate the whole
 
		 // invalidate only the internal rect
		 CRect	rcCombo  = _GetFlatComboInvalidateRect();
		 CRect	rcThumb  = _GetFlatThumbInvalidateRect();
 
		 CRect	rcUpdate = rc & rcCombo;
		 InvalidateRect(&rcUpdate, FALSE);
		 rcUpdate = rc & rcThumb;
		 InvalidateRect(&rcUpdate, FALSE);
 
		 // Update
		 LRESULT	lRet = DefWindowProc();
		 CClientDC	dc(m_hWnd);
		 _DoComboPaint(dc.m_hDC);
	} else {
		SetMsgHandled(FALSE);
	}
}
 
//
//////////////////////////////////////////////////////////////////////////////////////
 
// private:
 
void CComboBoxProxy::_DoComboPaint(CDCHandle dc)
{
	_DrawFlatCombo(dc, m_state);
	_DrawFlatThumb(dc);
}
 
 
void CComboBoxProxy::_DrawFlatThumb(CDCHandle &dc)
{
	CRect	rc = _GetOriginalThumbRect();
 
	dc.DrawEdge(rc, BDR_RAISEDINNER, BF_RECT);
 
	rc.DeflateRect(1, 1);
	COLORREF	clrBtnFace = ::GetSysColor(COLOR_BTNFACE);
	dc.Draw3dRect(rc, clrBtnFace, clrBtnFace);
}
 
void CComboBoxProxy::_DrawFlatCombo(CDCHandle &dc, _ComboState state)
{
	COLORREF	clrBtnFace = ::GetSysColor(COLOR_BTNFACE);
 
	CRect		rc;
	GetClientRect(&rc);
 
	dc.Draw3dRect(rc, clrBtnFace, clrBtnFace);
	rc.DeflateRect(1, 1);
 
	switch (state)
	{
	case _comboNormal:
		dc.DrawEdge(rc, BDR_SUNKENOUTER, BF_RECT);
		break;
 
	case _comboHot:
		dc.DrawEdge(rc, BDR_RAISEDINNER, BF_RECT);
		break;
 
	case _comboPressed:
		break;
	}
}
 
CRect CComboBoxProxy::_GetOriginalThumbRect()
{
	CRect	rc;
 
	GetClientRect(&rc);
	rc.right	-= s_kcxyBorder;
	rc.left		 = rc.right - ::GetSystemMetrics(SM_CXHTHUMB);
	rc.top		+= s_kcxyBorder;
	rc.bottom	-= s_kcxyBorder;
 
	return rc;
}
 
 
CRect CComboBoxProxy::_GetFlatThumbInvalidateRect()
{
	CRect	rc = _GetOriginalThumbRect();
 
	rc.DeflateRect(2, 2);
	return rc;
}
 
CRect CComboBoxProxy::_GetFlatComboInvalidateRect()
{
	CRect	rc;
 
	GetClientRect(&rc);
	rc.DeflateRect(2, 2);
	rc.right -= ::GetSystemMetrics(SM_CXHTHUMB);
	return rc;
}
 
void CComboBoxProxy::_SetUseXPTheme(HWND hWnd, BOOL bUse)
{
	if (bUse) {
		::SetWindowTheme( hWnd, L" ", L"COMBOBOX" );
	} else {
		::SetWindowTheme( hWnd, L" ", L" " );
	}
}
 
 
 
「ComboBoxProxy」をウィキ内検索
LINE
シェア
Tweet
lafe @ ウィキ
記事メニュー
メニュー
  • トップページ

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

  • ExpTabBar

  • SetDefaultAudioDevice

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

  • ImageArrangement

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

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



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


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

更新履歴

取得中です。
人気記事ランキング
  1. SetDefaultAudioDevice
  2. Proxydomo
  3. ImageArrangement
  4. Proxydomo - English edition
  5. ExpTabBar old
  6. SSLフィルタリング
  7. TEMP
  8. C++
  9. unDonutHistory
もっと見る
最近更新されたページ
  • 2023日前

    メニュー
  • 2023日前

    ExpTabBar
  • 2023日前

    ExpTabBar old
  • 2365日前

    Proxydomo
  • 3102日前

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

    FileDlgHack
  • 3182日前

    右メニュー
  • 3289日前

    proxydomo_detail
  • 3517日前

    Proxydomo - English edition
  • 3607日前

    SetDefaultAudioDevice
もっと見る
人気記事ランキング
  1. SetDefaultAudioDevice
  2. Proxydomo
  3. ImageArrangement
  4. Proxydomo - English edition
  5. ExpTabBar old
  6. SSLフィルタリング
  7. TEMP
  8. C++
  9. unDonutHistory
もっと見る
最近更新されたページ
  • 2023日前

    メニュー
  • 2023日前

    ExpTabBar
  • 2023日前

    ExpTabBar old
  • 2365日前

    Proxydomo
  • 3102日前

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

    FileDlgHack
  • 3182日前

    右メニュー
  • 3289日前

    proxydomo_detail
  • 3517日前

    Proxydomo - English edition
  • 3607日前

    SetDefaultAudioDevice
もっと見る
ウィキ募集バナー
急上昇Wikiランキング

急上昇中のWikiランキングです。今注目を集めている話題をチェックしてみよう!

  1. カリヨン時計@wiki
  2. バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  3. シュガードール情報まとめウィキ
  4. モンスター烈伝オレカバトル2@wiki
  5. トリコ総合データベース
  6. cookie clicker 日本語wiki
  7. アサルトリリィ wiki
  8. ロックマンエグゼまとめ@ ウィキ
  9. ファイアーエムブレム用語辞典
  10. モンスター烈伝オレカバトル@wiki
もっと見る
人気Wikiランキング

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

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

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

  1. MADTOWNGTAまとめwiki
  2. MadTown GTA (Beta) まとめウィキ
  3. ステラソラwiki
  4. まどドラ攻略wiki
  5. 首都圏駅メロwiki
  6. Last Z: Survival Shooter @ ウィキ
  7. ちいぽけ攻略
  8. シュガードール情報まとめウィキ
  9. ソニックレーシング クロスワールド 攻略@ ウィキ
  10. 戦国ダイナスティ攻略Wiki@ウィキ
もっと見る
全体ページランキング

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

  1. Pokémon LEGENDS Z-A - アニヲタWiki(仮)
  2. 破壊神マハデーヴァ - モンスター烈伝オレカバトル2@wiki
  3. 参加者一覧 - MADTOWNGTAまとめwiki
  4. カラスバ(ポケモン) - アニヲタWiki(仮)
  5. 真崎杏子 - 遊戯王DSNTナイトメアトラバドール攻略Wiki@わかな
  6. XVI - MADTOWNGTAまとめwiki
  7. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  8. ブラックマジシャンガールのエロ動画 - イナズマイレブンの人気投票で五条さんを一位にするwiki 五条さんおめでとう
  9. 【移転】Miss AV 見れない Missav.wsが見れない?!MissAV新URLはここ!無料で見れるミラーサイト!閉鎖・終了してない!missav.ai - ホワイトハッカー研究所
  10. angler - MADTOWNGTAまとめwiki
もっと見る

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

2019 AtWiki, Inc.