【问题标题】:SendMessage() not working in MFC applicationSendMessage() 在 MFC 应用程序中不起作用
【发布时间】:2014-02-21 06:58:56
【问题描述】:

我有一个 MDI MFC 应用程序,我想在其中使用 CPropertieswnd 类中的 SendMessage() 来调用 CMainFrame 类中的函数。自定义消息定义为:

#define WM_CUSTOM (WM_APP + 10)

Mainframe.cpp 中的消息映射是:

ON_COMMAND(WM_CUSTOM , &CMainFrame::OnFileNewType1)    

在 Propertieswnd.cpp 文件中发送消息:

AfxGetMainWnd()->SendMessage(WM_CUSTOM);

但 OnFileNewType1() 函数从未被调用过。谁能指导我缺少哪一点?

【问题讨论】:

    标签: c++ mfc sendmessage


    【解决方案1】:

    您必须使用 ON_MESSAGE 处理程序来处理消息。

    ON_MESSAGE

    函数应该在CMainFrame中声明如下:

    afx_msg LRESULT OnFileNewType1(WPARAM wParam, LPARAM lParam);

    【讨论】:

      【解决方案2】:

      如果您想模仿选择菜单项或单击工具栏按钮的行为,并使用相同的代码选择菜单项并发送您自己的命令,您可以使用已有的处理程序。您只需要修复您的 SendMessage 的参数。

      AfxGetMainWnd()->SendMessage(WM_COMMAND, WM_CUSTOM, 0); 
      

      所有的菜单项点击、加速器等都被转换为 WM_COMMAND 消息,然后通过系统路由以调用您的 ON_COMMAND 处理程序。如果您想搭载该系统,您还需要发送 WM_COMMAND 消息。如果没有,您需要按照其他人的建议走 ON_MESSAGE 的路线。

      有关 WM_COMMAND 及其 wParam 和 lParam 参数的更多详细信息,请参阅here

      【讨论】:

        【解决方案3】:

        您需要两个步骤来处理您创建的自定义消息。 1) 创建消息处理函数。 2) 将其与您的自定义消息映射。

        例如。

        #define WM_CUSTOM WM+10
        

        假设你的消息处理函数(你的类的一部分)如下

        afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
        

        在 BEGIN_MESSAGE_MAP 中映射您的消息和消息处理程序

        BEGIN_MESSAGE_MAP(CMyWnd2, CWnd)
           ON_MESSAGE(WM_CUSTOM , OnMyMessage)
        END_MESSAGE_MAP()
        

        现在

        AfxGetMainWnd()->SendMessage(WM_CUSTOM);
        

        被调用。消息处理函数 OnMyMessage 将被调用。您可以使用此方法编写代码。

        详细了解 WPARAM 和 LPARAM 的详细信息,以便您也可以使用它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-06-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多