读书人

为什么WndProc里只要有 WM_PAINT就占用

发布时间: 2012-01-23 21:57:28 作者: rapoo

为什么WndProc里只要有 WM_PAINT就占用cpu 100%?
我的wndproc定义如下

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch(message){
case WM_CREATE:
return 0;
case WM_LBUTTONDOWN:
return 0;
case WM_PAINT: //只要有这2行,程序一运行就占用cpu 100%
return 0;//去掉这2行就一切正常,请问这是为什么?
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, message, wParam, lParam );
}

[解决办法]
因为窗口时刻都会检查自身是否存在Update Regions,如果有则会发送WM_PAINT消息,直到调用BeginPaint,EndPaint处理后,窗口才会把Update Regions置空。所以你的WM_PAINT里没有调用BeginPaint和EndPaint处理重绘消息,WM_PAINT消息就会不断被发送,陷入死循环。把那两行去掉,WM_PAINT消息就会在DefWindowProc得到处理,默认的处理就是调用BeginPaint和EndPaint把窗口的Update Regions置空。所以你在WM_PAINT里加上这两句,就会正常。

读书人网 >VC/MFC

热点推荐