pWindow = (WqWindow *)GetWindowLong(hwnd, GWL_USERDATA);
вернет NULL или еще чего похуже, т.к. эти данные заполняются только по WM_NCCREATE, а он приходит позже. Текущее решение:
int WqWindow_mmi_minW, WqWindow_mmi_minH, WqWindow_mmi_maxW, WqWindow_mmi_maxH;
CRITICAL_SECTION WqWindow_mmi_cs;
...
void setMinMaxInfo(int minW, int minH, int maxW, int maxH){ ... }
HWND Create(){
EnterCriticalSection(&WqWindow_mmi_cs);
WqWindow_mmi_maxW = mmi_maxW; WqWindow_mmi_maxH = mmi_maxH;
WqWindow_mmi_minW = mmi_minW; WqWindow_mmi_minH = mmi_minH;
hWnd = CreateWindowEx(NULL, "WqMainWindow", Caption.c_str(), WS_OVERLAPPEDWINDOW,
startPos.left, startPos.top, startPos.right, startPos.bottom,
NULL, NULL, hInstance, NULL);
LeaveCriticalSection(&WqWindow_mmi_cs);
...
}
static LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
if(uMsg == WM_GETMINMAXINFO){
if(WqWindow_mmi_maxW != -1) ((MINMAXINFO *)lParam)->ptMaxTrackSize.x = WqWindow_mmi_maxW;
if(WqWindow_mmi_maxH != -1) ((MINMAXINFO *)lParam)->ptMaxTrackSize.y = WqWindow_mmi_maxH;
if(WqWindow_mmi_minW != -1) ((MINMAXINFO *)lParam)->ptMinTrackSize.x = WqWindow_mmi_minW;
if(WqWindow_mmi_minH != -1) ((MINMAXINFO *)lParam)->ptMinTrackSize.y = WqWindow_mmi_minH;
return 0;
}
if(uMsg == WM_NCCREATE){
MessageBox(0, "WM_NCCREATE", "Message", MB_ICONASTERISK);
SetWindowLong(hwnd, GWL_USERDATA, (LONG)((LPCREATESTRUCT)lParam)->lpCreateParams);
}
WqWindow *pWindow;
pWindow = (WqWindow *)GetWindowLong(hwnd, GWL_USERDATA);
return pWindow->WndProc(hwnd, uMsg, wParam, lParam);
}
Оно работает, но мне не нравится