コンボボックスのボタンの無効方法 – 固定ページ 2 – プログラミング – Home

コンボボックスのボタンの無効方法
 
通知
すべてクリア

[解決済] コンボボックスのボタンの無効方法

固定ページ 2 / 2

たみあ
 たみあ
(@たみあ)
ゲスト
結合: 22年前
投稿: 57
 

case WM_CTLCOLORSTATIC:
{
HDC hdcStatic = HDC( wParam );
HWND hwndStatic = HWND( lParam );
if( hwndStatic == 対象のウィンドウハンドル )
{
SetBkColor( hdcStatic, GetSysColor( COLOR_WINDOW ) );
return LRESULT( GetSysColorBrush( COLOR_WINDOW ) );
}
break;
}

こちらでは、こんな感じで実現できました

環境、Windows 2K VC6+SP5 SDK


返信引用
jan
 jan
(@jan)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

>たみあ様
 え!!本当ですか!?
 
 こちらでも、先ほど確認したとき、ほぼ同じやり方で(ウィンドウハンドルの判別部分
 のみ違う)やっていたのですができなかったのですが・・・・(^^;A
 ウィンドウハンドル判別は、どうせ、所持していたとしても一つしかないからいいか、と
 思って省きました。
 この処理をしている場所はコンボボックスのフックしたプロシージャ内でよろしいんです
 よね!?

 当方のコードはこんな感じです。
 一つ白状(?)しますと、使用しているコモンダイアログボックスは、「ファイルを開く」
 ダイアログです。

 ~ダイアログのWM_INITDIALOGメッセージ内~
HWND hCmb = GetDlgItem(GetParent(hDlg), cmb1);
 DefComboBoxProc = (WNDPROC)SetWindowLong(hCmb,GWL_WNDPROC,
                              (LONG)HookComboBoxProc);

 ~フックプロシージャ~
 LRESULT CALLBACK HookComboBoxProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM
                                       lParam)
 {
switch(msg)
{
case WM_CTLCOLORSTATIC:
SetBkColor( (HDC)wParam, GetSysColor( COLOR_WINDOW ) );

return LRESULT( GetSysColorBrush( COLOR_WINDOW ) );

     }

return ::CallWindowProc(DefComboBoxProc,hWnd, msg, wParam, lParam);

 }

 DefComboBoxProcはグローバル変数として宣言してあります。

 


返信引用
たみあ
 たみあ
(@たみあ)
ゲスト
結合: 22年前
投稿: 57
 

>>この処理をしている場所はコンボボックスのフックしたプロシージャ内でよろしいんですよ
ね!?

いえいえ、親ウィンドウのウィンドウプロックです


返信引用
jan
 jan
(@jan)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

>たみあ様
 できました!!どうもありがとうございました!!
 いや~、見てくれはそんなたいしたことないですがとても感動してます!!
 でもまさか親ダイアログのプロシージャ内で処理するとは・・・・・
 
 いままでお付き合いいただいて本当にありがとうございます。m(_ _)m
 記述するコードはウィンドウハンドル判別以外は
   return LRESULT( GetSysColorBrush( COLOR_WINDOW ) );
 のみでいけました。

 ちなみにテキストの色はどうされましたでしょうか?


返信引用
jan
 jan
(@jan)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

テキストはもう一度描画することで解決させました。
またお知恵おお借りすることがあると思いますのでそのときはよろしくお願いいたします。

jan


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました