我创建了一个基于对话框的程序不过隐藏时会有屏幕一闪,请问如何隐藏才能不让用户感觉到。注意是基于对话框的程式。

解决方案 »

  1.   

    你应该要MFC的吧?
    把下面代码加到OnInitDialog()中
    WINDOWPLACEMENT     wp;   
      wp.length=sizeof(WINDOWPLACEMENT);   
      wp.flags=WPF_RESTORETOMAXIMIZED;   
      wp.showCmd=SW_HIDE;   
      SetWindowPlacement(& wp);   
      

  2.   

    重载onpaint,在onpaint中隐藏对话框。再重载onncpaint在其中影藏
      

  3.   

    会闪一下是因为app类里面的InitInstance函数中调用了dlg.DoModal()
    如果想不闪的话,把InitInstance里面INT_PTR nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
    // TODO: 在此处放置处理何时用“确定”来关闭
    //  对话框的代码
    }
    else if (nResponse == IDCANCEL)
    {
    // TODO: 在此放置处理何时用“取消”来关闭
    //  对话框的代码
    }
    这段代码改成:dlg.Create(IDD_DIALOG);
    dlg.ShowWindow(SW_HIDE);
    MSG msg;
    while(GetMessage(&msg,NULL,0,0))
    {
    DispatchMessage(&msg);
    TranslateMessage(&msg);
    }另外在对话框类的OnClose中加入SendMessage(WM_QUIT,0,0);
      

  4.   

    楼上的确实是个办法。不过会在托盘区点消息传递时受不到消息。消息只有在指定的窗口。
    正确的方法可以分几个步骤
    (1):将窗口去掉标题栏等属性。
    (2):在窗体onpaint和onncpaint时将透明度设置为0,SetLayeredWindowAttributes(0, 255, LWA_ALPHA);(否则在有些机器上会有一块白色的过去) 隐藏ShowWindow(SW_HIDE);
    (3):在任务栏不出现一闪而过,Dlg::OnInitDialog()中ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);使他不出现在任务栏
    当然如果用win32程式的话不麻烦了。只要在init对话框的时候dlg.ShowWindow(SW_HIDE);
    了