none
向另一个类发送消息的问题 RRS feed

  • 问题

  • 在一个类中向另一个类发送消息的时候出了点问题,程序没有报错,就是消息响应函数没反应

            ___________________________________________________________________
           |                                                      |                                                             |
           |         View 1                                   |                  View 2                                  |
           |_____________________________ _|___________________________________|
           |   头文件中定义:                                |       头文件中定义:                                  |
           |  #define  MYMSG (WM_USER+100)   |  #define  MYMSG (WM_USER+100)          |
           |  HWND h_Wnd;                               |   HWND   m_hWnd;                                |
           |                                                      |   View1 *pView1;//下面传递句柄用            |
           |                                                      |   pView1->h_Wnd = m_hWnd;                 |
           |                                                      |消息响应函数:afx_msg LRESULT                |
           |                                                      |       OnMyMessage(WPARAM wParam,       |
           |                                                      |           LPARAM lParam);                         |
           |_______________________________|___________________________________|
           |                                                      |                                                             |
           |       CPP文件中                                |              CPP文件中                                 |      |______________________________|___________________________________|
           |   在按钮响应中:                               |  在begin_msg_map/end_msg_map中:       |
           |  ::PostMessage(h_Wnd,MYMSG,0,0);|  ON_MESSAGE(MYMSG, OnMyMessage)     |
           |                                                     |   在响应函数中:                                        |
           |                                                     | LRESULT C***View::OnMyMessage(         |
           |                                                     |  WPARAM wParam, LPARAM lParam)         |
           |                                                     |  {  .....    }                                             |
           |______________________________|____________________________________|


    xiao
    2011年2月28日 9:38

答案

  • 这是程序的架构有问题,如果用CSplitterWnd分割窗口后实现窗口间的通信只能是通过与文档或框架相联.不能用发消息的方法.
    xiao
    • 已标记为答案 wh_xiao 2011年3月2日 4:58
    2011年3月1日 0:33

全部回复

  • 具体是这样的:

    发送消息类.h文件

    #define MYMSG (WM_USER+100)

    HWND hDataHwnd;//这里是要接收句柄的指针,因为postmessage中要用到

    .cpp文件

    void CMyTreeView::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult)
    {
     LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
     // TODO: Add your control notification handler code here
      ::PostMessage(hDataHwnd, MYMSG, 0, 0);//发送消息,
     *pResult = 0;
    }

    ________________________________________________

    接收消息类.h文件:

    HWND hwnd ;

    CMyTreeView m_MyTreeView;//发送消息类的对象

    afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);//VS2010没有/////{{AFX_MSG(CF)........//}}AFX_MSG宏

    cpp文件

    #define MYMSG (WM_USER+100)

    hwnd = GetSafeHwnd();//在构造函数中初始化

    void CMyDataView::OnInitialUpdate()
    {
     CFormView::OnInitialUpdate();
     m_MyTreeView.hDataHwnd = hwnd;//HWND句柄传到发送消息的类中

    }

    BEGIN_MESSAGE_MAP(CMyDataView, CFormView)
    // ON_WM_CREATE()
     ON_MESSAGE(MYMSG, OnMyMessage)
    END_MESSAGE_MAP()

    LRESULT CMyDataView::OnMyMessage(WPARAM wParam, LPARAM lParam)
    {
     AfxMessageBox(_T(""));
     return 0;
    }

     

    消息响应函数没反应,如果在接收消息的类中用

    PostMessage(MYMSG, 0, 0)就有反应.


    xiao
    2011年2月28日 12:30
  • 这是程序的架构有问题,如果用CSplitterWnd分割窗口后实现窗口间的通信只能是通过与文档或框架相联.不能用发消息的方法.
    xiao
    • 已标记为答案 wh_xiao 2011年3月2日 4:58
    2011年3月1日 0:33
  • Hi wh_xiao,

    很高兴您的问题解决了,

    感谢您把你的解决方案分享出来,这对于以后遇到一样问题的人来说是很有价值的。

     

    谢谢,

    Lucy


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年3月2日 5:56
    版主