0

我正在尝试实现这篇文章 但是当我在资源视图(在消息选项卡中)查看我的对话框“拥有”的所有消息时,我没有看到这条消息。知道如何捕捉它(它可用吗?是 IDE 问题吗?)谢谢,Dani

4

1 回答 1

4

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_ Messages: T - Z找到要使用的宏以及函数签名和名称。有了这个,你可以实现你的消息处理程序:

void CMyDialog::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
    CDialogEx::OnWindowPosChanging(lpwndpos);

    // TODO: Add your message handler code here
}

请注意,类向导实现(VS 2010 及更高版本)不再需要源代码中特殊格式的注释(就像在 VS6 中使用的那样)。手动添加消息处理程序不会破坏类向导功能。

于 2013-09-07T13:02:54.203 回答