我做了一个托盘程序的对话框Demo,想一开始隐藏对话框,要怎样实现?

解决方案 »

  1.   

    CYourDialog *pDlg=NULL;
    BOOL YourApp::InitInstance()
    {
       pDlg=new CYourDialog;
       pDlg->Create(CYouDialog::IDD,NULL);
       return TRUE; // remeber
    }void YourApp::ExitInstance()
    {
       pDlg->DestroyWindow();
       delete pDlg;
    }去掉对话框模中中的Visible属性
      

  2.   

    To:airhand(暴风雨) 
    我知道这个ShowWindow(WM_HIDE);可以隐藏,但这个放在什么地方,才能达到,程序一开始运行,就隐藏。TO:flyhigh(一不小心)
    这样就回立即退出程序了呀。如果不用
    CPDMDlg dlg;
    m_pMainWnd = &dlg;
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
    // TODO: Place code here to handle when the dialog is
    //  dismissed with OK
    }
    else if (nResponse == IDCANCEL)
    {
    // TODO: Place code here to handle when the dialog is
    //  dismissed with Cancel
    }
      

  3.   

    flyhigh(一不小心) ( ) 说的没错
    因为InitInstance()返回的是TRUE,所以并不会退出程序如果用在对话框中的OnInitDialog()函数中调用SHOWWINDOWS(WM_HIDE),对话框的界面会闪烁一下,然后消失,行为并不好
      

  4.   


    SHOWWINDOWS(WM_HIDE);
    放在OnPaint里。
      

  5.   

    我不是每次都要隐藏呀,难道要加一个flag吗?
      

  6.   

    在Visual C++.NET实践与提高—深入Windows编程 一书中讲述了4种初始时隐藏对话框的方案,你可以看看。
      

  7.   

    我在这里列出上面写的一种比较好的方法吧。
    设置对话框的visible属性为FALSE;
    在CXXXXApp.h中加入:
    CXXXXDlg *myDlg;
    将m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);从构造函数中移到OnInitDialog函数中
    在InitInstance函数中,进行修改如下:
    {
    ……;//
    myDlg=new CXXXXDlg;
    m_pMainWnd=myDlg;
    return myDlg->Creat(IDD_XXXX_DIALOG);
    }
    注意要在ExitInstance函数中通过delete来释放myDlg所指向的对象
      

  8.   

    把你的对话框由模态对话框改成非模态的,不用DoModal,而是Create即可。
      

  9.   

    用一个变量CRECT,保存当前,再MOVEWINODW(x,y,0,0)大小为零。可达到看不见的效果。不知可行否?
      

  10.   

    在InitDialog里直接MoveWindow 到屏幕外,要显示时再回来
      

  11.   

    我经常做这种托盘程序,小有心得,可以提供一点方法给楼主做参考。新建工程时不用Dialog Base模版,而选SDI模版。生成工程后,将ChildView的相关代码都删掉。并在CYourApp::InitInstance()函数中把
    pFrame->ShowWindow(SW_SHOW);
    改为
    pFrame->ShowWindow(SW_HIDE);
    将CMainFrame文件的PreCreateWindow函数这样改:
    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    cs.style = WS_POPUP;
    cs.dwExStyle |= WS_EX_TOOLWINDOW;

    return CFrameWnd::PreCreateWindow(cs);
    }之后,托盘图标的添加和销毁可以分别在CMainFrame::OnCreate和CMainFrame::OnDestory中来做。如果有对话框,就添加一个对话框类,在你的托盘图标事件中对该对话框进行处理就可以了。这样做,就不会出现程序启动时,窗口先闪一下再消失的情况了。