通过MFC向导新建一个基于dialog的应用程序mydialog,我想在程序起始时将其隐藏,但是由于其对话框是Model()方法产生的模式对话框,好象不能隐藏,如果我将其用Create方法改成非模式对话框,又会出现错误.是不是基于DIALOG的应用程序不能隐藏呢?但是它是继承自CWND类的,应该可以隐藏,究竟怎么做呢?

解决方案 »

  1.   

    ::ShowWindow(this->GetSafeHwnd(), SW_HIDE);
      

  2.   

    可以隐藏的.不过也要掌握时机.如果你在App里用这个语句,如果在domode之前,会因为窗口没有创建无效,如果在之后,会报错(我刚才测试了一下),大概因为是DOMODE了,这边不能"动"了^_^
    如果你在Dlg里面的OnInitDialog里用,也会因为窗口还没有创建而无效.我是方法是这样:
    1.在OnInitDialog里加上SetTimer(1,1,NULL);
    2.重载OnTimer函数,写上:ShowWindow(SW_HIDE);
    运行试试!
      

  3.   

    可以在OnInitDialog中加入如下代码来隐藏:
    ::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, WS_EX_TOOLWINDOW); 

    wp.length=sizeof(WINDOWPLACEMENT); 
    wp.flags=WPF_SETMINPOSITION; 
    wp.showCmd=SW_HIDE; 
    SetWindowPlacement(&wp);
      

  4.   

    qrlvls(≌AIR⌒LIKE) (≤和空气一样帅≥√) 
    是高手.正解
      

  5.   

    显示
    ::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, WS_EX_WINDOWEDGE); 

    wp.length=sizeof(WINDOWPLACEMENT); 
    wp.flags=WPF_SETMINPOSITION; 
    wp.showCmd=SW_SHOW; 
    wp.ptPosition = CPoint(0, 0);  
    wp.rcNormalPosition = CRect(0, 0, 100, 100);
    SetWindowPlacement(&wp);
    注意:
      上面 CPoint(0,0); 应该修改成OnInitDialog中所得到的窗口左上角坐标
    CRect(0, 0, 100, 100);应该修改成OnInitDialog中所得到的窗口大小
      

  6.   

    在OnPaint里写
    if (m_bHide)
    {
        ShowWindow(SW_HIDE);
    } else {
        ShowWindow(SW_NORMAL);
    }
      

  7.   

    恩,那么多高手都解答了,我就不再说了! 呵呵,不过楼上的可说错了! 主对话框也可以模式对话框的,但是要控制app里面不要return就可以了,就是让程序退不出来就可以!
      

  8.   

    的确是的,我对线程类了解不够,主对话框可以非模式,不过InitInstance必须返回TRUE,
    CDLGTESTApp theApp;
    CDLGTESTDlg* dlg;/////////////////////////////////////////////////////////////////////////////
    // CDLGTESTApp initializationBOOL CDLGTESTApp::InitInstance()
    {
    AfxEnableControlContainer();
    dlg=new CDLGTESTDlg();
    dlg->ShowWindow(SW_SHOW);
    m_pMainWnd = dlg;
    return TRUE; 
    }
    int CDLGTESTApp::ExitInstance() 
    {
    delete dlg;
    return CWinApp::ExitInstance();
    }
      

  9.   

    不知楼主的问题解决了没有.
    不过上面的办法似乎有点缺陷.
    使用timer的办法是正道,不过用户能看到界面闪了一下,感觉不太好.
    在oninitdialog中用SetWindowPlacement的缺点是失去活动窗口.(因为活动窗口是隐藏了的dialog)
      

  10.   

    呵呵,如果返回false,就会销毁程序所有的资源了,但是如果返回true,就会启动线程消息循环,而且不会因为你关闭了主对话框而关闭整个程序!      这种方法应该很少会有人使用的!当然少数情况下,要同时启动多个对话框窗口,也许还有点用吧!
      

  11.   

    我觉得楼主的问题,真正的解决之道,在于用非模式对话框,而不能因为它会报错,就想出个办法隐藏它来! 呵呵,窗口隐藏了,问题也隐藏了,所以还不是解决之道,你贴出来,到底create是报什么错误啊?