У меня проблемы с использованием CreateWindowEx . Если я установлю конечный параметр (LPVOID lpParam) в NULL и использую возвращенный дескриптор окна при вызове ShowWindow , окно отобразит все нормально. Однако мне нужно передать указатель на класс, который я буду модифицировать, основываясь на некоторых сообщениях операционной системы, которые я перехватываю. Когда я пытаюсь сделать это, указав lpParam как this , мой возвращенный дескриптор, по-видимому, является мусором, потому что передача его в ShowWindow вызывает: обнаружен во время обратного вызова пользователя. "
Понятия не имею, как это отладить, поэтому я застрял.
Указанный адрес остается неизменным между передачей и извлечением.
Я не определил регистр WM_PAINT.
Обработчик WM_CREATE:
case WM_CREATE:
{
// get screen resolution
HWND desktop = GetDesktopWindow();
RECT R;
GetWindowRect(desktop, &R);
int width = R.right - R.left;
int height = R.bottom - R.top;
HWND loading_image;
loading_image = CreateWindowEx(0,L"Static",L"Image", SS_CENTERIMAGE | SS_BITMAP | WS_CHILD | WS_VISIBLE,0,0,width,height,hwnd,(HMENU)ID_IMAGE3,g_hInst,NULL);
SetClassLong(loading_image,GCL_STYLE,CS_HREDRAW | CS_VREDRAW);
HBITMAP bitmap = (HBITMAP)LoadImage(NULL,L"loadingscreen.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
SendMessage(loading_image,STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)bitmap);
progressbar = CreateWindowEx(0, PROGRESS_CLASS, (LPTSTR)NULL, WS_CHILD | PBS_SMOOTH | WS_VISIBLE, width/2-400,100,800,20,hwnd,(HMENU)0,g_hInst,NULL);
SendMessage(progressbar,PBM_SETSTEP,20,NULL);
CREATESTRUCT* cs = (CREATESTRUCT*)lParam;
app = (D3DApp*)cs->lpCreateParams;
return 0;
}
Вызов WindowProc сбой при 70 мсг (WM_WINDOWPOSCHANGING). Это не плохо для предыдущих сообщений: WM_NCCALCSIZE, WM_CREATE, WM_PARENTNOTIFY, WM_SIZE, WM_SIZE или WM_SHOWWINDOW, хотя WM_SHOWWINDOW обрабатывается незадолго до WM_WINDOWPOSCHANGING, так что я предполагаю, что WM_WINWOWS * получает только 10 * WWWWSWOWS *, получая от WM_WINWOWSOW * только 10WWWWSWOWCH