編集:子ウィンドウ(つまり、マイボタン)の作成中にWM_CREATEメッセージが送信されないと思います。したがって、WM_CREATE中にSendMessageを呼び出すと、まだ作成されていないウィンドウにメッセージが送信されます。今の解決策は、WM_SHOWWINDOWメッセージ中にSendMessage()を呼び出すことです。子ウィンドウは作成時にWM_CREATEメッセージを送信しますか?WIN32の「BUTTON」クラスウィンドウにビットマップを表示
ボタンにビットマップが表示されないのはなぜですか?ビットマップは180x180ピクセルです。
私が持つリソースファイルがあります:私は送って、私の窓の手順では、次に
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);
:私は、その後にメインウィンドウと子の「BUTTON」ウィンドウを作成
Bit BITMAP bit.bmp
を"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()は有効なハンドルを返していますeこれはNULLを返していないので、BitBlt()関数を使用してクライアント領域にビットマップを表示できます。だから私は正しくメッセージを送信していないか、または私は正しく "ボタン"ウィンドウを作成していないです。
私は間違っていますか?
ありがとうございます!
ありがとうございます。私も同じことを考えましたが、試してみましたが、実際にボタンは一切表示されませんでした。唯一効果があったのは、SendMessage()をWM_SHOWWINDOWに入れることでした。 – tyler
これは、d = CreateWindow(...、hwnd、...)ではなく、d = CreateWindow(...、b、...)を呼び出しているためだと思います。 CreateWindow、bはまだ割り当てられていません。 – RichieHindle
うわー、華麗です。完全に意味があります。ありがとう。 – tyler