关于点击系统右下角显示桌面按钮而在MFC程序中引发的问题

之前自己仿造了windows系统的便笺,利用MFC做了个便签程序。主要就是想取消windows便笺在任务栏的缩略图,然后实现最小化到右下角托盘区的功能。

便签做出来后,出现了一个bug:当用户点击系统右下角显示桌面按钮或者按windows+D组合键时,便签窗体会消失,但是用鼠标点击托盘区的图标时,程序无论如何也不出现。只有当用户打开其他窗口(例如某个文件夹,或者浏览器等)时,这个便笺程序才会随之一起出现。

对于这个bug我是非常郁闷的,毕竟它的表现方式非常古怪,而且涉及到系统层次的操作,解决起来略棘手。

刚开始我认为是自己在SetWindowPos里把程序设置为windows窗体Z序最底层而引发的错误,但是在我改变了程序的Z序之后,情况照旧。在网上找资料的时候,有人说在SetWindowPos函数里把窗口设置为TopMost就可以过滤系统“显示桌面”的消息。我设置了之后,的确是过滤了系统显示桌面的消息,但是它也变成了像任务管理器一样,无论何时都处于其它窗口的上方,这显然与我当初的设置初衷不相符。一个便笺就应该安安静静的躺在桌面上,并且不能覆盖桌面上的其它窗口,不是吗?

然后我又想到,用户点击显示桌面按钮时,可能程序收到了系统的最小化消息,我把最小化消息给过滤掉,不就可以达到效果了!可惜自己学艺不精,并没有找到合适的消息进行过滤……

后来,我在响应托盘区单击消息的代码中加上一句ShowWindow(SW_NORMALSHOW),仍旧不生效,这个时候就是一通乱改,可以说是病急乱投医了。可是并没有什么用。

再后来,我在另一个程序中,看到了一个函数SetForegroundWindow(),然后我就用这个函数调用替换了ShowWindow(),这次便签可终于呈现出了应有的效果。在我点击“显示桌面”按钮之后,再点击右下角托盘区的图标,程序终于能顺利的显示了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值