編集:子ウィンドウ(つまり、私のボタン)の作成中にWM_CREATEメッセージが送信されないと思います。したがって、WM_CREATE 中に SendMessage を呼び出すことで、まだ作成されていないウィンドウにメッセージを送信しています。現時点での解決策は、WM_SHOWWINDOW メッセージ中に SendMessage() を呼び出すことです。子ウィンドウは作成時に WM_CREATE メッセージを送信しますか?
ボタンにビットマップが表示されないのはなぜですか? ビットマップは 180x180 ピクセルです。
次のリソースファイルがあります。
Bit BITMAP bit.bmp
次に、メイン ウィンドウと子の「BUTTON」ウィンドウを次のように作成します。
HWND b, d;
b = CreateWindow(L"a", NULL, WS_OVERLAPPEDWINDOW, 0, 0, 500, 500, 0, 0,
hInstance, 0);
d = CreateWindow(L"BUTTON", NULL, WS_CHILD | WS_VISIBLE | BS_BITMAP,
10, 10, 180, 180, b, 200, hInstance, 0);
次に、Windows プロシージャで、「BUTTON」ウィンドウに「BM_SETIMAGE」メッセージを送信します。
HBITMAP hbit;
case WM_CREATE: // It works if I change this to: case WM_SHOWWINDOW
hbit = LoadBitmap(hInstance, L"Bit");
SendMessage(d, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hbit);
LoadBitmap() は NULL を返さないため、有効なハンドルを返します。また、BitBlt() 関数を使用してクライアント領域にビットマップを表示できます。したがって、メッセージを正しく送信していないか、「ボタン」ウィンドウを正しく作成していません。
私は何を間違っていますか?
ありがとう!