はじめまして。
最近ダイアログベースでプログラムしているのですが、どうしてもボタンの色が変更できません。どのようにしたらいいか教えて下さい。
出来れば簡単な方法がいいのですが…。
宜しくお願いします。
こんにちは。
ボタンの色を変えたいということですが、
残念ながら簡単な方法はありません。
CButtonクラスの派生クラスを定義して
DrawItem関数をオーバーライドすることで
実現できます。詳しくはMSDNライブラリを
参照してください。
下記のサイトにはサンプルがあります。
http://www.codeguru.com/
SDKなら
WinProc 内で、WM_CTLCOLORBTNのメッセージをコールバックされます。
lParamに対象となるボタンのハンドルがきたらリターンコードにブラシをセットすればいいよ。
static HBRUSH hBrush = NULL;
switch(msg)
{
case WM_INITDIALOG:
hBrush = CreateSolidBrush(RGB(255, 255, 255));
break;
case WM_CTLCOLORBTN:
if(GetDlgItem(hWnd, ボタンID) == (HWND)lParam)
// ↑
// └ボタンのシンボルIDのこと。
{
SetTextColor((HDC)wParam, RGB(192, 192, 192)); // この行は、ボタンのテキストの色を変える命令
return (LONG)hBrush;
}
break;
・
・
・
MFCは、ClassWizardのダイアログボックスにWM_CTLCOLORのメッセージを登録すると下記の関数が登録される
HBRUSH ダイアログ名::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
あとは、SDKのと同じ用に対象となるウインドハンドルを見つけて変更したいブラシでリターンすればOK。
SDKなら
WinProc 内で、WM_CTLCOLORBTNのメッセージをコールバックされます。
lParamに対象となるボタンのハンドルがきたらリターンコードにブラシをセットすればいいよ。
static HBRUSH hBrush = NULL;
switch(msg)
{
case WM_INITDIALOG:
hBrush = CreateSolidBrush(RGB(255, 255, 255));
break;
case WM_CTLCOLORBTN:
if(GetDlgItem(hWnd, ボタンID) == (HWND)lParam)
// ↑
// └ボタンのシンボルIDのこと。
{
SetTextColor((HDC)wParam, RGB(192, 192, 192)); // この行は、ボタンのテキストの色を変える命令
return (LONG)hBrush;
}
break;
・
・
・
MFCは、ClassWizardのダイアログボックスにWM_CTLCOLORのメッセージを登録すると下記の関数が登録される
HBRUSH ダイアログ名::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
あとは、SDKのと同じ用に対象となるウインドハンドルを見つけて変更したいブラシでリターンすればOK。
皆さんご解答有難うございます。
しかし、私の技術力ではちょっと出来ませんでした。
もっと勉強して出直して来ます。