EntryNavi : « イチゴパフェ | メイン | こしあん生シュー »

CategoryNavi : メイン -> コンピューター -> 開発 -> C/C++

ダイアログの背景色を変更する

「DialogBox」APIを使用して作成したダイアログは背景色が通常変更できません。
たぶん・・・。
なので変更する方法、その1です。
その2は試したのですが上手くいかないのでそのうちってコトで。

簡単に説明すると「WM_ERASEBKGND」という背景を塗りつぶせというメッセージがOSから投げつけられるのでそこで好きな色で処理をする感じです。

では、サンプルです。

#include <windows.h>
//メッセージクラッカを使用する為のヘッダ
#include <windowsx.h>

LRESULT CALLBACK DialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL Cls_OnEraseBkgnd(HWND hWnd, HDC hdc);

//メイン
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,LPSTR lpsCmdLine, int nCmdShow)
{
DialogBox(hCurInst, "IDD_DLG_RESORCE_NAME", NULL, (DLGPROC)DialogProc);

return 0;
}

//ダイアログのコールバック
LRESULT CALLBACK DialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg){
HANDLE_MSG(hWnd, WM_ERASEBKGND, Cls_OnEraseBkgnd);
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}

// 背景を塗りつぶす
BOOL Cls_OnEraseBkgnd(HWND hWnd, HDC hdc)
{
RECT rt;
HPEN hPen, hOldPen;
HBRUSH hBrush, hOldBrush;

//ウインドウのクライアント領域のサイズを取得
GetClientRect( hWnd, &rt );
//ペンの変更
hPen = (HPEN)GetStockObject(NULL_PEN);
hOldPen = (HPEN)SelectObject(hdc, hPen);
//ブラシの変更
hBrush = CreateSolidBrush(RGB(239, 235, 222));
hOldBrush = (HBRUSH)SelectObject(hdc, hBrush);
//hBrush = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
//hOldBrush = (HBRUSH)SelectObject(hdc, hBrush);
//領域を塗りつぶす
Rectangle(hdc, rt.left,rt.top,rt.right,rt.bottom);
//ブラシを戻す
SelectObject(hdc, hOldBrush);
//ペンを戻す
SelectObject(hdc, hOldPen);
//ブラシを削除
DeleteObject(hBrush);
return true;
}
以上です。
後は、ダイアログのリソースを用意すれば実行できるはずです。
ペンとブラシは、「GetStockObject」APIで標準のものを使用していますので「DeleteObject」を使用できません。
と、勘違いしてましたがしても大丈夫だそうです。必要ないけど使用しても問題なしです。
あと、上記のブラシはウインドウに特定のパラメータがついてないと使用できないので通常の方法で作成して使用するように変更しました。
<Category : C/C++>

検索

Google

サイドフィード

track feed 理ろぐ
人気ブログランキング - 理ろぐ
Powered by
Movable Type 3.34