一个基于DOC/VIEW框架的程序中有一个aa对话框,
在aa对话框的OnInitDialog()中,又创建一个无模式对话框BB
m_Dlg_TrigMenu.Create(IDD_DIG_TRIGMENU,this);//m_Dlg_TrigMenu  为已定义  的                                                  bb对话框的类。
在该语句执行后中断,发现m_Dlg_TrigMenu的m_pParentWnd参数为空。
用 m_Dlg_TrigMenu.GetParent()得到的值也不为this的值。
难道m_Dlg_TrigMenu 不是aa  的子对话框吗?
m_Dlg_TrigMenu 的父对话框又是谁呢?如何在bb 对话框中向
 aa对话框发消息?

解决方案 »

  1.   

    你必须在Create函数的Style参数中加入WS_CHILD ,要不然它就不会有父窗口的,
      

  2.   

    要将create的窗口的属性改为WS_CHILD才行!
      

  3.   

    http://www.vckbase.com/document/viewdoc/?id=794
      

  4.   

    这是个好问题。: )消息的发送可分为 4 种方式。①同一窗口内收发:消息用宏定义,使用成员函数 PostMessage() 或 SendMessage()
     或 SendNotifyMessage() 发送。②应用程序之间收发:消息用 const int WM_... = RegisterWindowMessage(_T("..."));
     定义,使用 API 函数 ::Postmessage() 或 ::SendMessage() 或 ::SendNotifyMessage()
     发送。第一个参数使用HWND_BROADCAST,向其它程序发;使用 NULL,向自己发。③主窗口向子窗口发:消息用宏定义,使用成员函数 SendMessageToDescendants() 发送。④子窗口向主窗口发、同一应用程序的窗口之间互发:要使用②的方法。
     在发送窗口类中添加成员变量 m_SendToHwnd,想办法将接受窗口成员函数 GetSafeHwnd() 
     的返回值赋给 m_SendToHwnd。使用②中函数,第一个参数传入 m_SendToHwnd 即可。 如:
        C*Dlg dlg1;
        C#Dlg dlg2;
        dlg1.m_SendtoHwnd = dlg2.GetSafehwnd(); 或:
        void C*Dlg::***()
        {
            C#Dlg dlg;
            dlg.m_SendtoHwnd = this->GetSafehwnd();
        }
      

  5.   

    我在m_Dlg_TrigMenu.Create(IDD_DIG_TRIGMENU,this);
    后用TRACE观察this和m_Dlg_TrigMenu.GetParent()的值都是相等
    没错啊