用DoModal()打开一个对话框的时候,怎么让它打开的时候就是隐藏的?
用ShowWindow()可以让窗口隐藏,但我把它放在InitInstance()或者WM_CREATE的处理函数中都不成功,该怎么办?

解决方案 »

  1.   

    在InitDialog里加:
    ShowWindow(SW_HIDE);
      

  2.   

    是OnInitDialog()吧?也不行,刚试过。
      

  3.   

    添加 WM_SHOWWINDOW 的消息映射void CxxxDlg::OnShowWindow(BOOL bShow, UINT nStatus)
         {
              if ( GetStyle() & WS_VISIBLE )
              {
                   CDialog::OnShowWindow(bShow, nStatus);
              }
              else
              {
                   long Style = ::GetWindowLong(*this, GWL_STYLE);
                   ::SetWindowLong(*this, GWL_STYLE, Style | WS_VISIBLE);
                   CDialog::OnShowWindow(SW_HIDE, nStatus);
              }
         }
      

  4.   

    WM_SHOWWINDOW 是每次窗口需要显示的时候,就触发的消息。
    而我需要的效果是:在对话框开始打开的时候,让它自动隐藏。以后什么时候显示,什么时候隐藏由具体情况决定。
    所以我想应该把ShowWindow()函数放在一段初始化的事件代码中。但我试过了在OnInitDialog()或者其它一些能初始化的地方都没有成功。希望有高手指点。
      

  5.   

    直接调用this->ShowWindow(SW_HIDE);应该就可以了.
      

  6.   

    重载PreCreateWindow(CREATESTRUCT& cs) ,取消WS_VISIBLE窗口属性。
      

  7.   

    在OnInitDialog中添加下面这段代码:
    ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);
    WINDOWPLACEMENT wp;
    wp.length=sizeof(WINDOWPLACEMENT);
    wp.flags=WPF_RESTORETOMAXIMIZED;
    wp.showCmd=SW_HIDE;
    SetWindowPlacement(&wp);