先说下我的问题吧。
我在VC6.0下建了一个MFC EXE的对话框工程和一个MFC Regular DLL工程。
在DLL中插入了一个非模对话框,我要通过EXE对话框上的按钮消息来触发将DLL对话框显示出来,并且(这就是困扰我的问题)希望点击任意一个对话框都能使它在另一个前面。但是不能在DLL的构造中实现(这样我能实现它,但只能是两个对话框一起弹出来了),只能通过EXE的按钮消息触发它。
望高手不吝赐教!小弟先谢过了!

解决方案 »

  1.   

    你的DLL怎么加载?只要你能得到对话框句柄就可以给它发送消息让它ShowWindow或CreateDialogHWND hwndGoto = NULL;  // window handle of dialog box
    case IDM_GOTO:
        if (!IsWindow (hwndGoto)) {
            hwndGoto = CreateDialog (hinst, MAKEINTRESOURCE (DLG_GOTO), hwnd, (DLGPROC) GoToProc);
            ShowWindow (hwndGoto, SW_SHOW);
        }
      

  2.   

    我是隐式加载DLL的。
    这样似乎不行吧?我是希望通过exe对话框的按钮来触发调用DLL中的接口函数,然后在接口函数中来显示DLL的对话框,所以不能获得父窗口的句柄啊!
    最重要的是我希望DLL对话框显示出来后不要老是挡着父窗口,当点击它们任意一个窗口时能显示在最前面。
      

  3.   

    你的DLL怎么加载?只要你能得到对话框句柄就可以给它发送消息让它ShowWindow或CreateDialogHWND hwndGoto = NULL; // window handle of dialog box
    case IDM_GOTO:
      if (!IsWindow (hwndGoto)) {
      hwndGoto = CreateDialog (hinst, MAKEINTRESOURCE (DLG_GOTO), hwnd, (DLGPROC) GoToProc);
      ShowWindow (hwndGoto, SW_SHOW);
      }
      

  4.   

    >>这样似乎不行吧?我是希望通过exe对话框的按钮来触发调用DLL中的接口函数,然后在接口函数中来显示DLL的对话框,所以不能获得父窗口的句柄啊
    1.对dll接口进行改造,增加返回值(就是dll中非模态对话框的句柄,或CDialog指针 ),增加个参数
       该参数就是父窗口指针或句柄.
    2.dll中对话框句柄有了,你怎么操作都行
      SetwindowPos函数对dll对话框控制其Z轴方向.
      

  5.   

    问题是现在不能更改DLL的接口,所以用SetwindowPos也无法改变其z轴方向。
    我试过在DLL对话框类的构造或者初始化对话框函数中创建显示对话框可以实现,但是这样两个对话框就一起弹出来了,我是希望用exe的对话框按钮来触发它。
    高手们,我到底该怎样做啊???
      

  6.   

    OnButton()的时候 new 一个DLL类实例
      

  7.   

    怎么会不行,依据你的设计或加载方式的不同可以有多种方案,例如你的DLL里如下导出一个ShowDlg()BOOL CALLBACK DlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
    extern "C" __declspec (dllexport)
    void ShowDlg()
    {
        hwndDlg = CreateDialog (hDll, MAKEINTRESOURCE (IDD_DLG_SHOW), NULL, (DLGPROC) DlgProc);
        ShowWindow (hwndDlg, SW_SHOW);
    }最后按钮指定行为里ShowDlg();一下
      

  8.   

    可能是我没说清楚吧。我想问的不是怎样将它们显示出来,而是怎样让两个对话框可以相互切换到Z轴最上面。像你们说的只能让DLL的对话框在最上面,不能切换啊。