分类:
2006-06-12 16:45:04
回到正题,在1.4.3节介绍GetMessage函数时,曾说过如果hWnd参数是无效的窗口句柄或
lpMsg参数是无效的指针时,GetMessage函数将返回?1。当我们关闭窗口时,调用了DestroyWindow来销毁窗口,由于窗口被销毁
了,窗口的句柄当然也就是无效的句柄了,那么GetMessage将返回?1。在C/C++语言中,非0即为真,由于窗口被销毁,句柄变为无效,
GetMessage总是返回?1,循环条件总是为真,于是形成了一个死循环,机器当然就“变慢了”。:)
在MSDN关于GetMessage函数的说明文档中给出了下面的代码:
BOOL bRet;
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
针对我们这个问题,可以修改上述代码如下:
…
HWND hwnd;
hwnd=CreateWindow(…);
…
MSG msg;
BOOL bRet;
while( (bRet = GetMessage( &msg, hwnd, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
return -1;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
…
读者可以再次运行修改后的程序,看看运行的结果。