有两个对话框窗口1,2,其中对话框窗口1是通过对对话框窗口2上的一个BUTTON进行消息响应得到的,程序刚一运行时是显示的对话框窗口2,当点击BUTTON时,让对话框窗口1显示,并将对话框窗口2销毁或隐藏,如何能办到?我也试过用DestoryWindow();ShowWindow(SW_SHOW);但都不行!

解决方案 »

  1.   

    这样的方法你试试
    CChatDlg* pDlg = new CChatDlg(ChattingID , RecMsg , MyID , ChattingBuddyName, &ChatDialogMap);
    pDlg->SetChatType(ChatType);
    pDlg->Create(IDD_DIALOG_CHAT,::CWnd::FromHandle(::GetDesktopWindow()));
    这是个非摸态出窗体的,pDlg->Create(IDD_DIALOG_CHAT,::CWnd::FromHandle(::GetDesktopWindow()));使得点击BUTTON出来的新的窗体的所有操作和原来窗体分开!
    然后你在后面加一个原来窗体的销毁估计就可以,你试试
      

  2.   

    是不是你domodal后showwindow,这样不行
      

  3.   

    LZ没搞清楚对象,对话框窗口2点BUTTON显示对话框1,在2中是不是有1的这个类?即使有是不是显示1类的同一个对象?1中显示2同样的道理,还有就是注意显示与销毁的先后;LZ用属性页面应该比较好管理和实现吧
      

  4.   

    有个办法可以实现.
    自己写回调函数把系统消息Hook起来.
    不过有些麻烦.建议多看看回调函数和系统消息处理.
    WNDPROC g_oldWndProc;
            ///...
    //..... //在窗口1Init的时候调用
    WNDPROC oldProc = (WNDPROC)::SetWindowLongPtr(parent, GWLP_WNDPROC, (LONG)CustomWndProc);
    if ( g_oldWndProc == NULL )
    g_oldWndProc = old;
    然后自己回调
    LRESULT CALLBACK CustomWndProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam )
    {
    // Call the default procedure.
    LRESULT result = ::CallWindowProc(g_oldWndProc, hWnd, nMsg, wParam, lParam); return result;
    }
      

  5.   

    有两个对话框窗口1,2,其中对话框窗口1是通过对对话框窗口2上的一个BUTTON进行消息响应得到的,程序刚一运行时是显示的对话框窗口2,当点击BUTTON时,让对话框窗口1显示,并将对话框窗口2销毁或隐藏,如何能办到?我也试过用DestoryWindow();ShowWindow(SW_SHOW);但都不行!-----------〉
    我认为你可以在dialog1的窗体初始化的时候将dialog2作为模式对话框显示出来,那么只有dialog2 close的时候,dialog1才会显示出来。呵呵~~不知道这样能否帮你解决问题?
      

  6.   

    楼上的说的好像都复杂了吧。楼主的思路也可行啊
    在CXXDialog2的OnButtonX中执行this->ShowWindow(SW_HIDE);//隐藏Dialog2
    CXDialog1 dlg1;
    dlg1.Domodal();//显示Dialog1
    this->ShowWindow(SW_SHOW);//Dialog1关闭后再显示Dialog2
    我初学MFC Dialog时就这样做过。