对于Dialog,在你的APP里把DoModal去掉。
用Create的方法生成窗口,ShowWindow(SW_HIDE);
如果用DoModal,肯定是要出来的

解决方案 »

  1.   

    假如程序本身是一个对话框应用程序的话,主窗口并不是用DoModal建立的,在主窗口对应的CPP文件中的OnInitDialog()中(假如没有的话用ClassWizard加入)直接增加ShowWindow (SW_HIDE);,前面不需要AfxGetMainWnd()->。
      

  2.   

    To xiaozuo
    你应该看一看对话框应用程序的APP类的InitInstance.
    没有CMyDialog dlg,
    dlg.DoModal,哪里能跑出个对话框来。OnInitDialog()跟
    窗口的显示与否根本就不搭界
      

  3.   

    小弟觉得,仅是在initialDialog里面加好像不行
    反倒是在OnPain()里加比较好。
      

  4.   

    小弟觉得,仅是在initialDialog里面加好像不行
    反倒是在OnPain()里加比较好。
      

  5.   

    小弟觉得,仅是在initialDialog里面加不行
    反倒是在OnPain()里加ShowWindow(SW_HIDE)比较好。
      

  6.   

    小弟觉得,仅是在initialDialog里面加不行
    反倒是在OnPain()里加ShowWindow(SW_HIDE)比较好。
      

  7.   

    对不起,昨晚上发错了,是用的SW_HIDE,可是加在OnInitDialog()里还是不行。
    请高手再讲讲:1.前面加AfxGetMainWnd()和不加在实现机制和实现结果上有什么不同?
    2.程序本身是由APP WIZARD创建的对话框应用程序,不知如何隐藏主窗口(就一个对话框)。谢谢xiaoyuer,你的方法是可行的,不过启动时屏幕要闪一下,不知有没有更好的方法。
      

  8.   

    1 AfxGetMainWnd一般用在有嵌套窗口的情况下,可以获得程序的主窗口,如果不加,
    那么可能操作的对象是嵌套窗口的子窗口。就这个区别。2 我已经回答过这个问题了,不知你有没有试一试.
      

  9.   

    ShowWindow(SW_SHOWNORMAL);
    是通常窗口大小,用SW_HID应该没问题
    或干脆用::CloseWindow()函数
      

  10.   

    to vcbear:
    除了去掉dlg.Domodal()外
    还应该把后面的return FALSE改为return TRUE;
    否则的话程序会马上退出的
      

  11.   

    To vcbear:
    我按你说的试过了,不过Create之后,闪一下就没有了,整个应用程序都结束了。
      

  12.   

    To xiaoyuer:
    我改成TRUE,还是退出,不知又是什么问题?
      

  13.   

    我的Dialog是主窗口。vcbear,xiaoyuer,两位仁兄不如将 InitInstance 里的代码贴上来,小弟好学习一下。另外,Create 之后,OnInitDialog 里的代码还执行吗?
      

  14.   

    ...
    CMy31Dlg* dlg;
    dlg=new CMy31Dlg;
    m_pMainWnd =dlg;
    dlg->Create(IDD_MY31_DIALOG,NULL);
    //Sleep(3000);
    dlg->ShowWindow(SW_HIDE);
    return TRUE;但是这样还是在Create()会闪一下,我以前也是这样
    后来干脆将主窗口改成了启动画面,比如金山词霸那样的。
    如果你是创建托盘图标的话,不妨一试
      

  15.   

    在Dlg资源编辑器里把visible属性取掉。
    在Dlg类的某个地方,PostQuitMessage(WM_QUIT),以退出程序
    CDlgBaseDlg *pdlg = new CDlgBaseDlg;
    pdlg->Create(IDD_DLGBASE_DIALOG,NULL); //m_pMainWnd = pdlg;

    //pdlg->ShowWindow (SW_HIDE);
        MSG Msg;
    while(GetMessage(&Msg ,pdlg->m_hWnd ,0,0))
    {
    if(Msg.message == WM_CLOSE|Msg.message ==WM_QUIT)
    {
       PostQuitMessage(WM_QUIT);
       break;
    }
         TranslateMessage(&Msg);
     DispatchMessage(&Msg);
    }
    return false;
      

  16.   

    抱歉
    pdlg->ShowWindow(SW_HIDE)的 注释应该取掉。这样做不会闪的。
      

  17.   

    我想大概是vcbear先生误会了我的意思,我的本意是说关于对话框的cpp文件的OnInitDialog()中不存在DoModal,当然在对话框的CWinApp文件中的InitInstance()中是有DoModal的,不然对话框就不会出来了。
    在OnInitDialog()使用无修饰的ShowWindow(SW_HIDE)肯定可以隐藏对话框,问题是隐藏后必须马上调用你需要做的函数,比如OnOK()。我的ExeShell中就使用这种方法:
      ShowWindow(SW_HIDE);
      OnOK();                            //调用设定功能
      if((Radio&RADIO(4))==0) exit(0); //在非特技启动时立即退出
      CDialog::OnOK(); //在特技启动时还要进行延时
    其中OnOk()使用ClassWizard加入的,并且屏蔽了其中的CDialog::OnOK(),执行完任务后可以用CDialog::OnOK()结束程序。
      

  18.   

    在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)里cs.style = WS_POPUP;                 //使主窗口不可见
    cs.dwExStyle |= WS_EX_TOOLWINDOW;    //不显示任务按钮试试吧 :)
      

  19.   

    下面这个方法我试过是可行的,不过有点麻烦。先在对话框中加一个按钮,ID号是IDC_BUTTON1,visible属性可以设为FALSE,
    这样以后对显示不会有影响。在其消息处理函数中加入下面一条语句:ShowWindow(SW_HIDE);把对话框的visible属性设为FALSE,然后在OnInitDialog函数中加入下面四句:
    long style = GetWindowLong( m_hWnd, GWL_STYLE );
    style |= WS_VISIBLE;
    SetWindowLong( m_hWnd, GWL_STYLE, style );
    PostMessage( WM_COMMAND, IDC_BUTTON1 );
      

  20.   

    我是用Delphi的,但我想在VC中也一样,不用象上面说的那么麻烦。
    你在一个TTimer里定义隐藏主窗口(普通隐藏窗口的方法就行)然后使关闭Timer即可。
    我在delphi里试过了,没问题。
      

  21.   

    void CreateHiddenWindow(HINSTANCE hInstance)
    {
        WNDCLASS wc;
        MSG      msg;
        HWND     hwnd;    memset(&wc, 0x00, sizeof(WNDCLASS));    wc.lpfnWndProc = HiddenWndProc;
        wc.hInstance = hInstance;
        wc.lpszClassName = kHiddenWindow;    RegisterClass(&wc);
             
        hwnd = CreateWindow(kHiddenWindow, 
                            kHiddenWindow,
                            WS_POPUP, 
                            0, 
                            0, 
                            100, 
                            100,
                            NULL, 
                            NULL, 
                            hInstance, 
                            NULL);    if(hwnd)
        {
            while(GetMessage(&msg, NULL, 0, 0))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    }
      

  22.   

    简单的方法:
    在OnInitDialog结束时,设置定时器,在OnTimer中设置HIDE显示属性。
    直接在OnInitDialog中做是不行的。