将窗体最小化到任务栏状态条的方法(二)

前面写过一篇文章是关于最小化窗口到托盘的方法,那只是一个测试用的版本,用来说明实现原理还是可以的,但是在实际的开发过程中可能我们的需求与此有很大的不同。

 

例如 在程序开始启动的时候,窗体最小化到托盘,而窗体不显示在桌面上。

起初实现了一个版本,但是会出现闪一下的效果,这很不爽,我想肯定是哪里出了问题。实现的方法是在OnPaint()消息处理函数中,加入ShowWindow(SW_HIDE)函数,这很显然不是最好的解决方案,所以继续探索第二种方法。

 

第二种方法中涉及到了两个关键性的函数:CWnd::MoveWindow()和CWnd::ModifyStyle()

CWnd::MoveWindow()函数用来把窗体消失,但是虽然在桌面上看不见了,但是在最下面的任务栏中仍然可以看见。所以第二个函数CWnd::ModifyStyle()就该发挥作用了,我们用这个函数将窗口的扩展模式增加WS_EX_TOOLWINDOW ,删除WS_EX_APPWINDOW,这样最下面任务栏中就不见了这个窗体了。

 

具体的思路就是,当你的对话框窗体处理WM_INITDIALOG消息的时候,就开始调用隐藏窗体的函数,这样就不会显示窗体了,而且也没有闪一下的BUG了。当我们想让窗体复原显示的时候,我们在通过上面那两个函数将窗体的位置,显示模式更改回来。

具体的代码如下:

//隐藏窗体

void CTestboxDlg::HideMainDlg(){
 GetWindowRect((LPRECT)m_normal);
 MoveWindow((LPRECT)m_disapear);
 ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);

}

 

//显示窗体

void CTestboxDlg::ShowMainDlg(){
 CRect r;
 GetWindowRect((LPRECT)r);
 if (r!=m_normal||!IsWindowVisible())
 {
  ModifyStyleEx(WS_EX_TOOLWINDOW,WS_EX_APPWINDOW);
  MoveWindow((LPRECT)m_normal); 
  
  if (IsIconic())
   {
    ShowWindow(SW_RESTORE);
   }
   ShowWindow(SW_NORMAL);  
 
 }
 SetForegroundWindow();

}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值