各位大虾小弟有一个问题,我在一个MFC对话框程序中初始化了一个CTreeCtrl控件,并用ClassWizard生成了该CTreeCtrl控件的NM_DBLCLK消息的响应函数。获足NM_DBLCLK这个通告消息是为了又击树型控件的某个叶子时显示对应的非模态对话框。这样问题来了:双击树型控件的叶子后,非模态对话框总是显示在主对话框(即树型控件所在的对话框)的后面,换言之非模态对话框初始显示时会被主对话框遮住,要点击一下非模态对话框,他才会完整显示出来。
请问是那里出了问题,又如何解决这个问题:
(我用的是Win2000+VC6.0)
(我把代码放到一个按钮的响应函数里,点击按钮显示出来的非模态窗口是在主窗口前面的。)

解决方案 »

  1.   

    ShowWindow(SW_HIDE); //主窗口
    ShowWindow(SW_SHOW); //非模态对话框---试试
      

  2.   

    你的非模态创建的时候用
    cmydialog dlg;
    dlg.create(idmddlg, this);
    dlg.showwindow(sw_show);
      

  3.   

    to lizmei001:
    用你的方法我已经成功把非模态对话框显示到前面了,谢谢:)!to all:
    还有另一个问题:
    非模态对话框虽然已经显示到前面,但不是活动窗口,活动窗口还是主对话框。
    请问如何才能把非模态对话框设置成活动窗口呢?
    我尝试过了下面的代码,但不起作用:
    CShowDlg* pDlg = new CShowDlg(this);
    pDlg->Create(IDD_DIALOG_SHOW,this);
    pDlg->ShowWindow(SW_SHOW);
    pDlg->SetActiveWindow();
      

  4.   

    我尝试过了下面的代码,但不起作用: 
    CShowDlg*   pDlg   =   new   CShowDlg(this); 
    pDlg-> Create(IDD_DIALOG_SHOW,this); 
    pDlg-> ShowWindow(SW_SHOW); 
    pDlg-> SetActiveWindow();
    ====================
    你后面如果没有其他的代码的话,应该就可以了阿
      

  5.   

    pDlg-> SetActiveWindow();不起作用..?那就试试pDlg-> SetFocus();
      

  6.   

    你的非模态创建的时候用 
    cmydialog   dlg; 
    dlg.create(idmddlg,   this); 
    dlg.showwindow(sw_show);
    之后再用dlg-> SetActiveWindow(); 
    或者this->SetActiveWindow();试试.
    应该是可行的呀.我的就是这么用的.
      

  7.   

    谢谢大家的热心帮助,问题已经完全解决,其方法是在主对话框中的PreTranslateMessage加入类似于下面这样的代码:
    BOOL CTreeDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class BOOL bResult = CDialog::PreTranslateMessage(pMsg);
    if (WM_LBUTTONDBLCLK == pMsg->message && pMsg->hwnd == m_treeTest.m_hWnd)
    {
    CShowDlg* pDlg = new CShowDlg(this);
    pDlg->Create(IDD_DIALOG_SHOW,this);
    pDlg->ShowWindow(SW_SHOW);
    }
    return bResult;
    }
    另外也我也查到了派生一个CTreeCtrl类,并在派生类中写双击响应函数来实现,也能解决问题。不过我没试过这种方法。
    结贴。