前段时间第一次敲了一边windows窗口创建的代码,发现运行后,窗口没有显示出来。
调试之后发现CreateWindow根本没有创建成功, 然后发现有调用到WinProCallBack,再仔细检查代码发现,自己没有在WinProCallBack定义默认的处理函数,也就是DefWindowProc,当然了,也要好好研究下为什么没有定义DefWindowProc就会出现窗口没有出来,但是一直可以运行的状态。
<span style="white-space:pre"> </span>ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd);
MSG msg = {0};
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
首先,并没有在ShowWindow和UpdateWindow加判断条件直接进入消息循环,但是没有窗口,也就没有窗口的消息。
其次,为什么没有出现窗口,因为在CreateWindow的时候,会发送4个WM消息,调用WinProCallBack,我们并没有对这4个WM消息的处理,同时也没有交给系统去做Create的相关工作,导致创建窗口失败。