VS 2012 MFC 对话框中缺少WM_WINDOWPOSCHANGING
Missing WM_WINDOWPOSCHANGING in VS 2012 MFC dialog
我正在尝试实现这篇文章但是当我在资源视图(在消息选项卡中)中查看我的对话框"具有"的所有消息时,我没有看到此消息。知道如何捕获它(它可用吗?它是IDE问题吗?谢谢丹妮
MFC 类向导不显示已在
CWnd
基类中实现消息处理程序的消息。要处理WM_WINDOWPOSCHANGING
您所要做的就是覆盖CWnd::OnWindowPosChanging
。
更新:我刚刚检查过,我的Visual Studio 2012(更新3)安装确实列出了对话框类的WM_WINDOWPOSCHANGING
。如果未显示,则可能从"类名"下拉列表中选择了错误的类。
如果由于某种原因该消息未显示在类向导中,您仍然可以手动实现它。类向导只是一种方便,而不是必需的。MFC 通过构造一个消息映射来实现其消息处理,您可以通过消息映射宏添加消息处理程序来扩展该消息映射。
在对话框类中声明具有正确签名和名称的消息处理程序。 请注意,afx_msg
宏将展开为无,仅用于记录这是一个 MFC 消息处理程序。
afx_msg void OnWindowPosChanging(WINDOWPOS* lpwndpos);
将消息处理程序添加到对话框的消息映射中:
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
...
ON_WM_WINDOWPOSCHANGING()
END_MESSAGE_MAP()
您可以在WM_消息:T - Z 中找到要使用的宏以及函数签名和名称。完成此操作后,您可以实现消息处理程序:
void CMyDialog::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
CDialogEx::OnWindowPosChanging(lpwndpos);
// TODO: Add your message handler code here
}
请注意,类向导实现(VS 2010及更高版本)不再需要源代码中特殊格式的注释(就像在VS6中那样)。手动添加消息处理程序不会破坏类向导功能。