我正在尝试实施This Article
但是,当我查看所有消息时,我的对话框在资源视图中(在“消息”选项卡中)“有”,但看不到此消息。
任何想法如何捕获它(可用吗?这是IDE问题吗?)
谢谢,
丹妮
最佳答案
MFC类向导不显示在CWnd
基类中已经实现了消息处理程序的消息。要处理WM_WINDOWPOSCHANGING
,您要做的就是覆盖CWnd::OnWindowPosChanging
。
更新:我刚刚检查过,我的Visual Studio 2012(更新3)安装确实为对话框类列出了WM_WINDOWPOSCHANGING
。如果没有为您显示,则可能是您从“班级名称”下拉列表中选择了错误的班级。
如果由于某种原因在类向导中没有为您显示该消息,您仍然可以手动实现它。类向导只是一种便利,不是必需的。 MFC通过构造Message Map来实现其消息处理,您可以通过Message Map Macros添加消息处理程序来扩展它。
在对话框类中声明具有正确签名和名称的消息处理程序。请注意afx_msg
宏扩展为空,只是用来证明这是MFC消息处理程序。
afx_msg void OnWindowPosChanging(WINDOWPOS* lpwndpos);
将消息处理程序添加到对话框的消息映射中:
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
...
ON_WM_WINDOWPOSCHANGING()
END_MESSAGE_MAP()
您可以在WM_ Messages: T - Z处找到要使用的宏以及函数签名和名称。有了这个,您可以实现您的消息处理程序:
void CMyDialog::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
CDialogEx::OnWindowPosChanging(lpwndpos);
// TODO: Add your message handler code here
}
请注意,类向导的实现(VS 2010及更高版本)不再需要源代码中的特殊格式注释(如VS6中的注释)。手动添加消息处理程序不会破坏类向导的功能。
关于c++ - VS 2012 MFC对话框中缺少WM_WINDOWPOSCHANGING,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18671754/