我正在尝试实施This Article 但是,当我在资源视图(在消息选项卡中)查看我的对话框“有”的所有消息时,我看不到此消息。 任何想法如何抓住它(它是否可用?是IDE问题吗?) 谢谢, 达尼
答案 0 :(得分:4)
MFC类向导不显示已在 CWnd
基类中实现消息处理程序的消息。要处理WM_WINDOWPOSCHANGING
,您只需覆盖CWnd::OnWindowPosChanging
。
更新:我刚刚检查过,我的Visual Studio 2012(Update 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中一样)。手动添加消息处理程序不会破坏类向导功能。