我在使用WinAPI创建一个窗口时遇到了问题,这让我花了很长时间才解决。
对CreateWindowEx
的调用失败,返回0. GetLastError
,之后立即调用,也返回0.
当我在DefWindowProc
上设置断点时,我的调试器确认它正在被调用,应该是这样。
我在下面列出了一个最小的例子。为什么对CreateWindowEx
的调用失败?
LRESULT CALLBACK WndProc(
HWND hWnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
switch (Msg) {
case WM_DESTROY:
PostQuitMessage(EXIT_SUCCESS);
return 0;
}
// LRESULT WINAPI DefWindowProc(HWND, UINT, WPARAM, LPARAM);
return DefWindowProc(hWnd, msg, lParam, wParam);
}
hWnd = CreateWindowEx(
WS_EX_OVERLAPPEDWINDOW, // dwExStyle
CLASS_NAME, // lpClassName
WINDOW_NAME, // lpWindowName
WS_OVERLAPPEDWINDOW, // dwStyle
CW_USEDEFAULT, 0, // x, y
CW_USEDEFAULT, 0, // width, height
NULL, // hWndParent
NULL, // hMenu
hInstance, // hInstance
NULL // lpParam
);
if (NULL == hWnd) {
//GetLastError();
return 1;
}
答案 0 :(得分:1)
我不小心将我传递的wParam
和lParam
值切换为DefWindowProc
。
以正确的顺序给出函数参数解决了我的问题。
return DefWindowProc(hWnd, msg, wParam, lParam);