对话框程序如何隐藏? 我在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();但是显示的是个不爽的窗口,没重绘制完毕。谢谢帮忙解决了
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();但是显示的是个不爽的窗口,没重绘制完毕。谢谢帮忙解决了
解决方案 »
- CTreeCtrl 有关节点文本字体的及时更新
- 解决思路求解,一长串的规定动作,应该设计怎样的一组循环来实现它,A是对“ab”这个单词浏览的动作函数,B="ac"同理,C="ad",D="be",A' 带单引号的表示另一个规定的动作函数(回忆词意)。
- 有关数组作为行参
- 注册表编辑器被锁停用了,怎么就解决啊,
- 用ATL编写COM组件,如何操作DATE类型
- 窗口分割问题,请指教
- 请问在com的一个ATL类支持使用mfc,如CFile这些??谢谢
- 如何恢復一個已被刪除的文件,在線等待
- opengl编译出现问题,求助
- CWnd类的SubclassWindow函数如何使用
- BHO 中如何创建MFC窗体,在线等待
- libcd.pdb是个什么文件
在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);
添加成员
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);
}