如何在MFC生成的多个窗口类之间传递自定义消息?
第一次使用自定义消息,我的想法如下:(如有错误请指正)
假设有2过窗口类A,B,类A向类B发送自定义消息,使用PostMessage()函数。
那么在类A中应该先查找是否存在类B的句柄,如果找到,则向类B发送消息。
在类B中设定好消息响应函数。问题1:如何查找类B的句柄?
问题2;我的想法不知道有何错误?
问题3:不知谁有类似的简单例子,可以给我做参考吗,最好有完整代码

解决方案 »

  1.   

    问题1:检查类A中类B的句柄是否为NULL不就行了吗?还是我没看懂你的问题?
      

  2.   

    你的两个窗口是什么关系?总不能完全没有关系那样想获得句柄可就难了,比如说A是B的子窗口,那么可以用GetParent()函数获得句柄
      

  3.   

    HWND GetSafeHwnd( )
    用这个在B中获取B的窗口句柄---------------------------------------------------
    //from MSDNReturns m_hWnd, or NULL if the this pointer is NULL.HWND GetSafeHwnd( ) const;Return Value
    Returns the window handle for a window. Returns NULL if the CWnd is not attached to a window or if it is used with a NULL CWnd pointer. 
      

  4.   

    问题1:检查类A中类B的句柄是否为NULL不就行了吗?还是我没看懂你的问题?
    ================================
    基本上没什么联系
    在一个程序中,不同的2个窗口类,可他们需要数据交换,都从CDialog类继承
      

  5.   

    换句话说,就是如何在类A中获得类B的句柄是否存在或者如何在类A中得到类B的句柄
      

  6.   

    SDI的消息控制次序是视图、文档、SDI主框架窗口、应用程序;
    MDI的消息控制次序是视图、文档、MDI子框架窗口、MDI主框架窗口、应用程序;
    消息一旦上一层截获,就不会在发往下一层了;对话框类中获得主框架类的指针,再发送消息。CMDIFrameWnd *pFrame = 
                 (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;  pFrame ->PostMessage( WM_COMMAND, ID_YOUR_CMD, 0 ) ;但是,你在另外一个类中必须手动加入消息映射,
    // 在CYourDlg中定义消息映射
       BEGIN_MESSAGE_MAP(CYourDlg, CDialog)
           //{{AFX_MSG_MAP(CYourDoc)
           // ......
           //}}AFX_MSG_MAP
           ON_COMMAND( ID_YOUR_CMD, OnYourCmd )
       END_MESSAGE_MAP()试试看,方向应该没错吧!
      

  7.   

    解决了,谢谢各位方法如下:
    类A中
    CWnd *pWnd=CWnd::FindWindow(NULL,"窗口类B的caption");
        if (pWnd)
          pWnd ->PostMessage(MSG_DL,0,0);
    如果发现类B,就向类B发送消息,如果没有发现则跳过。