为什么我的程序总是无限制的接收到WM_PAINT消息啊?感觉像是死循环似的
我希望创建一个新类型的窗体来在界面上显示字符串(我没有使用STATIC控件),所以我注册了新的WNDCLASS,并创建了相应的窗体:
WNDCLASS cls;
cls.cbClsExtra = 0;
cls.cbWndExtra = 0;
cls.hbrBackground = (HBRUSH) (COLOR_HIGHLIGHTTEXT + 1);
cls.hCursor = LoadCursor(NULL, (LPCTSTR) IDC_HAND);
cls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW; cls.hIcon = NULL;
cls.hInstance = m_hInstance;
cls.lpszMenuName = NULL;
cls.lpszClassName = "JKRichLable32";
cls.lpfnWndProc = RichLableWndProc;
RegisterClass(&cls);
m_hWnd = CreateWindowEx(
WS_EX_TOPMOST,
"JKRichLable32", "",
WS_VISIBLE | WS_CHILD,
m_rcWindow.left - pt0.x, m_rcWindow.top - pt0.y, m_W, m_H,
m_hParent, NULL, m_hInstance, NULL);
问题就处在下面的消息处理函数中:
LRESULT __stdcall RichLableWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ switch (uMsg)
{
case WM_PAINT:
// DefWindowProc(hwnd, uMsg, wParam, lParam);
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
如果我在WM_PAINT消息中直接返回0(或返回1),那么我的程序将无限制的重复接受到WM_PAINT消息.但是,如果我在该消息中调用了DefWindowProc函数,再返回0(或返回1),那么消息函数处理正常.
为什么我必须在消息处理函数中调用DefWindowProc啊?这好象优点不符合逻辑啊?通常是如果我们不处理消息的时候才会交给DefWindowProc去处理啊!!!但这里我明明只希望自己来处理该消息......
问题点数:20、回复次数:3Top
1 楼jun_01(无名小卒)回复于 2005-06-01 15:20:11 得分 20
case WM_PAINT:
BeginPaint();
...Do sth...
EndPaint();
break;
祝你好运!Top
2 楼JerKii(JERKII SHANG)回复于 2005-06-01 17:29:52 得分 0
多谢!Top
3 楼pipilupzj(皮皮鲁)回复于 2005-06-01 17:59:25 得分 0
恩,需要用beginpaint将无效区域有效化,否则windows一直认为你那个无效区域是无效的,自然一直会收到WM_PAINT了Top
相关问题
- 在消息循环中,是不是用WM_PAINT 代替了WM_CREATE消息???
- win2000下c编程,我只使用showwindow,为什么还会有WM_PAINT消息发送给消息循环?
- 谁有MSSQLServer4 Kit For MSSQLServer 5.1.0 无限制版
- 关于无限制商品分类。。。
- 如何使Response.Write无限制写?
- WM_PAINT消息
- 求 InterBase的无限制用户的key(无内容)
- 哪里可以获得无限制的weblogic.jdbc.mssqlserver4.Driver驱动程序
- 请问哪里有VISIO2002无限制中文版下载?
- 谁有xaudio的SDK,无限制版,100分相送。




