Windows SDK 非模态对话框的消息处理 在SDK中使用非模态对话框时,主循环中必须插入下列代码:while(GetMessage(&msg,NULL,0,0) {我的问题是:
要搞掂这一连串的问题,首先要明白IsDialogMessage的作用,不要被它的名字搞懵。 现在对问题一(为什么要调用IsDialogMessage?)的回答也同时解决了问题四中的前半部分。 BOOL CDialog::PreTranslateMessage(MSG* pMsg)换句话说,CDialog还传递消息到另一个虚函数:CWnd::PreTranslateInput BOOL CWnd::PreTranslateInput(LPMSG lpMsg)你可能想到了CWnd::IsDialogMessage实际上是一个用m_hWnd作为HWND参数调用全程::IsDialogMessage的打包 函数。这就导致了MFC中每一个对话框解释自己的输入。如果你同时运行五个对话框,每一个对话框的PreTranslateMessage都调用 IsDialogMessage-所以说你就不必做什么了。MFC实在是牛啊,你压根就不必去操心IsDialogMessage,它会自己运转良好。 |