对话框程序如何隐藏? 我在Init..里面
  DWORD Style ; 
  Style = WS_EX_TOOLWINDOW;
  ::SetWindowLong(AfxGetMainWnd()->m_hWnd,GWL_EXSTYLE,Style);
  ::MoveWindow(AfxGetMainWnd()->m_hWnd,0,0,0,0,FALSE);可以隐藏了,但是我怎么显示出来?我现在做了个热键想显示出来,
mRect是开始的时候记录的 ,dwGlobalStyle也是 ::SetWindowLong(AfxGetMainWnd()->m_hWnd,GWL_EXSTYLE,dwGlobalStyle);
::MoveWindow(AfxGetMainWnd()->m_hWnd,mRect.left,mRect.top,mRect.Width(),mRect.Height(),FALSE);
CenterWindow(); SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE); UpdateWindow();
Invalidate();但是显示的是个不爽的窗口,没重绘制完毕。谢谢帮忙解决了

解决方案 »

  1.   

    我自己做了一个这样的程序
    在init中是不能使用  showWindow(ws_hide)的 因为在初始化window后,系统才显示窗体
    相当于在init执行后 系统在执行一次showWindow()
    在init中记录的窗体rect也是不准确的 width 和height没有问题
    但是top和 left就不行了 在init中记录的top bottom都是0
    但是在显示窗体的时候rect会变化
    我自己写的程序 可以完整的显示出窗体 但是按下热键后出现的窗体在左上角
    不过这个可以自己调整的^_^
    代码入下
    //init中
    Crect rect;
    GetWindowRect(&rect);
    CRect r= rect;
    r.right=r.left;             //宽度为0
    r.bottom=r.top;             //高度为0
    MoveWindow(r,FALSE);        //窗体隐藏     
    //hot key处理函数中
    rect.top+=height;          //height width是想让窗体出现的位置
    rect.bottom+=height;      //不用这4个语句 窗体就会出现在左上角~~
    rect.left+=width;
    rect.right+=width;
    this->MoveWindow(rect,true);
      

  2.   

    你这样做是不行的VC 对话框程序运行即隐藏,看起来容易实现,但要完美的解决(很多办法都要闪一下才隐藏),可不是那么容易,要一点小小的技巧。
    添加成员
    int IsFirstShow;//可能你需要它开始运行时隐藏,而不是一直隐藏,如果你要它一直隐藏,这里就不要声明了。
    构造函数里加IsFirstShow=1;
    响应WM_WINDOWPOSCHANGING消息。
    添加代码
    void CSpyRegExeDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
    {
        if(IsFirstShow!=1)//开始运行才隐藏,以后有SW_SHOW就正常显示
        {
            CDialog::OnWindowPosChanging(lpwndpos);
            return;
        } 
        //启动隐藏
        if(lpwndpos->flags&SWP_SHOWWINDOW)   
        { 
            lpwndpos->flags&=~SWP_SHOWWINDOW; 
            PostMessage(WM_WINDOWPOSCHANGING,0,(LPARAM)lpwndpos); 
            ShowWindow(SW_HIDE);
            IsFirstShow=0; 
        } 
        else  CDialog::OnWindowPosChanging(lpwndpos);
    }
      

  3.   

    显示?你可以隐藏后把图标加到任务栏中,然后单击任务栏图标响应IsFirstShow=0;ShowWindow( SW_SHOW );