我怎么做到在一个应用程序里,程序一运行,其主对话框就自动隐藏?
ShowWindow(SW_HIDE);这样的语句在哪写最合适?

解决方案 »

  1.   

    http://www.vckbase.com/document/viewdoc.asp?id=430
      

  2.   

    重载WM_WINDOWPOSCHANGING消息在其中加入下面两句
    if(!bVisible)
    lpwndpos->flags &= ~SWP_SHOWWINDOW;
    要显示时加入下面两句
       bVisible = TRUE;
       ShowWindow(SW_SHOW);
      

  3.   

    对于Dialog的隐藏——
      就不是在BOOL CMyTrayDlg::OnInitDialog()中

        AfxGetMainWnd()->ShowWindow(SW_HIDE);
        AfxGetMainWnd()->UpdateWindow();
    可以办到。
    而是要到
    void CMyTrayDlg::OnPaint()函数中加一句
    AfxGetMainWnd()->ShowWindow(SW_HIDE);
    就可以了,不过这种方法总是会存在程序一闪而过的现象。
    有一种“标准”的隐藏对话框的办法,不会还有一闪而过的现象。
    以下为具体步骤:1、定义布尔变量:
    bool visible;
    2、构造函数中初始化:
    CMyTrayDlg::CMyTrayDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CMyTrayDlg::IDD, pParent)
    {
    //{{AFX_DATA_INIT(CMyTrayDlg)
    // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    visible = false;   //在此初始化
    }
    3、重载WM_WINDOWPOSCHANGING及其消息函数:
       因为是系统原有的消息,不用再自己定义。
       包括(1)
    afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
    //}}AFX_MSG   
    DECLARE_MESSAGE_MAP()       (2)
    ON_WM_WINDOWPOSCHANGING()  
    //}}AFX_MSG_MAP
             END_MESSAGE_MAP()       (3)再加上具体函数实现:
    void CMyTrayDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) 
    {
        if(!visible)
            lpwndpos->flags &= ~SWP_SHOWWINDOW;    CDialog::OnWindowPosChanging(lpwndpos);
    }以上步骤做完后,就可以实现不拖泥带水的隐藏了。
    ----------------------------------------还有很多很多方法,就不说了。。