我希望创建一个新类型的窗体来在界面上显示字符串(我没有使用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去处理啊!!!但这里我明明只希望自己来处理该消息......