편집 : 자식 윈도우 (즉, 내 버튼)를 만드는 동안 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() 함수를 사용하여 클라이언트 영역에 비트 맵을 표시 할 수 있습니다. 그래서 메시지를 올바르게 보내지 않거나 "BUTTON"창을 올바르게 작성하지 못합니다.
내가 뭘 잘못하고 있니?
감사합니다.
감사합니다. 나는 똑같은 것을 생각했다. 그러나 그것을 시도했을 때 사실 전혀 버튼을 얻지 못했다. 유일한 방법은 SendMessage()를 WM_SHOWWINDOW에 넣는 것입니다. – tyler
d = CreateWindow (..., hwnd, ...)가 아닌 d = CreateWindow (..., b, ...)를 호출하기 때문에 그렇게 생각합니다. 기억하십시오. CreateWindow, 그래서 b 아직 할당되지 않았습니다. – RichieHindle
와우, 훌륭합니다. 완전히 이해가됩니다. 고마워. – tyler