晕菜问个极度让人郁闷的有关问题.对话框隐藏 /显示

晕菜问个极度让人郁闷的问题.对话框隐藏 /显示
对话框程序如何隐藏?   我在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();

但是显示的是个不爽的窗口,没重绘制完毕。谢谢帮忙解决了


------解决方案--------------------
我自己做了一个这样的程序
在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);

------解决方案--------------------
你这样做是不行的

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);
}