我希望创建一个新类型的窗体来在界面上显示字符串(我没有使用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去处理啊!!!但这里我明明只希望自己来处理该消息......
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去处理啊!!!但这里我明明只希望自己来处理该消息......
解决方案 »
- 我在一个对话框A中弹出对话框B。如何实现让B一直停靠在对话框A中啊
- 关于MFC DLL调用
- 送分100分:DEPENDENCY WALKER的7个小问题。
- 如何在自己的程序中截获ie中鼠标单击的事件?
- 问一个关于 SetTimer 的问题
- 【求教】还是《深入浅出MFC》中的问题
- 问题多多,请大虾指教!
- 让一个CEdit 获得输入焦点
- RegSvr32 XXX.Dll -> DllRegisterServer in XXX.Dll failed. return code is :0x80070078
- ----------一个小问题哦,大家来抢分----------C++小程序
- 为什么在DEBUG模式下使用TRACE,在输出窗口中却看不到TRACE输出的结果?
- 关于接收GPS信息的问题,UTC时间(日期)怎么和当前时间不对的呢?
BeginPaint();
...Do sth...
EndPaint();
break;祝你好运!