前提:一个窗口,其中有两个按钮,编号为A,B,每个按钮都可以打开各自的模式对话框,编号DA,DB。
要求:
1.在按下A,打开DA以后,在DA中有一个按钮C,按下C时首先关闭DA,并自动打开DB。(一定要关闭DA)
2.在按下B,打开DB以后,在DB中有一个按钮D, 按下D时首先关闭DB,并自动打开DA.(类似上面)

解决方案 »

  1.   

    softofsea() ,怎么实现啊,拜托具体说说看。
      

  2.   

    容易实现:
    按下C时,先关闭DA,再PostMessage给主窗口通知它打开DB,
    按下D时,先关闭DB,再PostMessage给主窗口通知它打开DA,
      

  3.   

    关闭DA:CDialog::OnOk();
    打开DB:DB dlg; 
            dlg.Domodal();
      

  4.   

    yzx0023(无聊客) 请问PostMessage写在什么地方比较好?
    如果模式对话框都关闭了,那么PostMessage还会执行吗?
      

  5.   

    LRESULT CDADialog::OnButtonC(...)
    {
         HWND hParent    = ::GetParent(m_hWnd);//如果那个窗口是父窗口的话,或者你可以用别的途径传递进来
         EndDialog(IDOK);
         ::PostMessage(hParent, UM_OPENDB, NULL, NULL);
    }DB同样处理如果模式对话框都关闭了,那么PostMessage还会执行吗?
    PostMessage关键看接受消息的窗口是否有效,发送者是没有关系的,即使不是窗口,也可以给任意窗口发消息
      

  6.   

    void CCDCDLG::OnButtonCdcF9() 
    {
    // TODO: Add your control notification handler code here
             SendMessage(WM_CLOSE);
    HWND hParent    = ::GetParent(m_hWnd);//如果那个窗口是父窗口的话,或者你可以用别的途径传递进来
         EndDialog(IDOK);
         ::PostMessage(hParent,IDC_BUTTON_MAIN_F4, NULL, NULL);

    }
    这是我实现的代码,但是并没有成功。
    即便是下面这样也还是不能打开新的窗口,关闭窗口是正常的。
    void CCDCDLG::OnButtonCdcF9() 
    {
    // TODO: Add your control notification handler code here
    HWND hParent    = ::GetParent(m_hWnd);//如果那个窗口是父窗口的话,或者你可以用别的途径传递进来
         EndDialog(IDOK);
         ::PostMessage(hParent,IDC_BUTTON_MAIN_F4, NULL, NULL);
         SendMessage(WM_CLOSE);
    }
      

  7.   

    ::PostMessage(hParent,IDC_BUTTON_MAIN_F4, NULL, NULL);
    改成
    ::PostMessage(hParent,WM_COMMAND, IDC_BUTTON_MAIN_F4, NULL);另外都EndDialog了就不用SendMessage(WM_CLOSE);了