如有这样一个类CAAA和一个对话框类CMyDlg,怎样在CAAA中发个消息给CMyDlg类?
MYApp.h:#define WM_MY_MESSAGE WM_USER+1
AAA.cpp:void CAAA::OnAAAmsgToDlg() 
{
????
????//向对话框发送消息
????}
MyDlg.h:
afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);MyDlg.cpp:     ON_MESSAGE(WM_MY_MESSAGE,OnMyMessage)//映射消息
....
....
//消息处理函数
afx_msg LRESULT CMyDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
CString ch;
ch.Format("Message Param is%d,%d",wParam,lParam);
Sleep(2000);
AfxMessageBox(ch);
return 0;

}

解决方案 »

  1.   

    首先,你必须在CAAA类中发送消息时,先获得对话框的窗口指针,比如pMyDlg,然后调用:
    pMyDlg->SendMessage(WM_MY_MESSAGE,wparam,lparam);
      

  2.   

    我就是不知道该怎样得到对话框的窗口指针啊我是这样做的:
    AAA.cpp:void CAAA::OnAAAmsgToDlg() 
    {
       CMyDlg *pDlg=new CMyDlg;
       pDlg->PostMessage(WM_MY_MESSAGE,0,0);//向对话框发送消息...
    }
    编译通过运行出错}
      

  3.   

    方法参见:VC6中两个对话框的同时显示  
    信息产业部电子第三十四所 黄基前  --------------------------------------------------------------------------------
     
    ---- 对于VC++初学者,可能会遇到这样一个问题:一个基于Dialog的MFC AppWizard应用程序,再Insert一个对话框,如何同时显示这两个对话框呢? ---- 其实这个问题很简单,想要在屏幕上同时显示两个对话框,并且这两个对话框都可以被激活,则至少第二个对话框应该为非模态对话框。启动非模态对话框的方法与启动一个普通窗口的步骤是一样的,即先调用窗口类的Create()函数创建一个窗口对象,再用ShowWindow()使之显示出来即可(值得注意的是:第二个对话框的对象不能为局部变量,否则在退出OnInitDialog时,该对象会被自动关闭,从而导致第二窗口也会关闭)。例如,下列的代码演示了如何在主对话框的OnInitDialog()中启动另一个非模态对话框。 CDialog2 Dlg2; //注意Dlg2不能为OnInitDialog的局部变量。
    BOOL CDialog1::OnInitDialog()
     {
       CDialog::OnInitDialog();
       Dlg2.Create(IDD_DIALOG2,this );
       Dlg2.ShowWindow(SW_SHOW);
    }---- 编译并运行,怎么样,结果是不是OK了? 
      

  4.   

    这样肯定不行的因为你的dlg还没初始化而且你在打开对话框后要再使用菜单只能是无模式对话框
    所以就应该是
    CMyDlg *pDlg=new CMyDlg;
    pDlg->Create(...);
    ::SendMessage( pDlg->GetSafeHwnd(),...);
      

  5.   

    你在CAAA中想发消息的时候,你确认这是对话框是运行状态吗?如果不是,那是不能发的。如果是,那么这个对话框实例在哪里定义,就想办法得到它的指针。你现在说的东西,我不知道你的对话框运行实例是在哪里。
      

  6.   

    发送之前你要先把对话框创建好,如下:
    void CAAA::OnAAAmsgToDlg() 
    {
       CMyDlg *pDlg=new CMyDlg;
       pDlg->Create(IDD_MY_DIALOG, this);
       pDlg->PostMessage(WM_MY_MESSAGE,0,0);//向对话框发送消息...
    }
      

  7.   

    一个消息必须由一个窗口接收。在窗口的过程(WNDPROC)中可以对消息进行分析,对自己感兴趣的消息进行处理。系统通过窗口句柄来在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口都会有自己的窗口过程,所以用户的输入就会被正确的处理。例如有两个窗口共用一个窗口过程代码,你在窗口一上按下鼠标时消息就会通过窗口一的句柄被发送到窗口一而不是窗口二。
      

  8.   

    对话框是在属性条中创建的
    CPropertySheet ps;
    CMyDlg dlg;
    ps.AddPage(&dlg);
      

  9.   

    1。在非模态对话框的构造函数里添加:
    if(Create(CMyDlg::IDD, pParent))
    {
    ShowWindow(SW_SHOW);
    }
    2。把对话框的指针定义为全局变量CMyDlg *g_pDlg;
    3。在使对话框弹出的函数中添加:
       if(!g_pDlg)
            g_pDlg = new CMyDlg(this);
    4。记得在关闭对话框时添加:
    delete this;
             g_pDlg = NULL;
    5。发送消息:
    void CAAA::OnAAAmsgToDlg() 
    {
    ...
       g_pDlg->PostMessage(WM_MY_MESSAGE,0,0);//向对话框发送消息...
    }