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. Chromium系列のブラウザでSSLフィルタリングが利用できない
もっと見る
最近更新されたページ
  • 1937日前

    メニュー
  • 1937日前

    ExpTabBar
  • 1937日前

    ExpTabBar old
  • 2279日前

    Proxydomo
  • 3016日前

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

    FileDlgHack
  • 3096日前

    右メニュー
  • 3203日前

    proxydomo_detail
  • 3431日前

    Proxydomo - English edition
  • 3521日前

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

    メニュー
  • 1937日前

    ExpTabBar
  • 1937日前

    ExpTabBar old
  • 2279日前

    Proxydomo
  • 3016日前

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

    FileDlgHack
  • 3096日前

    右メニュー
  • 3203日前

    proxydomo_detail
  • 3431日前

    Proxydomo - English edition
  • 3521日前

    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. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  8. Dark War Survival攻略
  9. ヒカマーWiki
  10. 星飼いの詩@ ウィキ
もっと見る
人気Wikiランキング

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

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

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

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

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

2019 AtWiki, Inc.