关于“显示桌面”按钮实现窗口隐藏的疑问,希望高手能帮忙解释一下:)

ioridf 2012-12-01 02:11:44
问题是这样的:

首先用MFC通过向导新建一个基于对话框的工程,什么都不用改,运行起来之后,再点“显示桌面”,这个对话框会隐藏起来,我想知道这个隐藏的过程知道是怎么实现的呢?我用spy++看了下,点“显示桌面”后,第一条消息是wm_paint,是因为给这个窗口发一条wm_paint,就实现隐藏窗口了么?如果不是的话,那控制窗口隐藏的消息是哪个呢?
用spy++抓到的消息情况如下(下面这些是窗口隐藏过程的消息):

<00001> 00090180 P WM_PAINT hdc:00000000
<00002> 00090180 S WM_NCPAINT hrgn:00000001
<00003> 00090180 R WM_NCPAINT
<00004> 00090180 S WM_CTLCOLORBTN hdcButton:3E01146B hwndButton:0007017E
<00005> 00090180 R WM_CTLCOLORBTN hBrush:0110005D
<00006> 00090180 S WM_CTLCOLORBTN hdcButton:17011340 hwndButton:00070182
<00007> 00090180 R WM_CTLCOLORBTN hBrush:0110005D
<00008> 00090180 S WM_CTLCOLORSTATIC hdcStatic:5E011347 hwndStatic:000B017C
<00009> 00090180 R WM_CTLCOLORSTATIC hBrush:0110005D
<00010> 00090180 S WM_CTLCOLORBTN hdcButton:5E011347 hwndButton:00100352
<00011> 00090180 R WM_CTLCOLORBTN hBrush:0110005D
<00012> 00090180 S WM_CTLCOLORBTN hdcButton:5E011347 hwndButton:000E031E
<00013> 00090180 R WM_CTLCOLORBTN hBrush:0110005D
...全文
131 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ioridf 2012-12-02
  • 打赏
  • 举报
回复
这个问题找到答案了,其实桌面本身就是个窗口,点那个“显示桌面”按钮,其实给桌面窗口发送了一定的消息,使这个桌面窗口切换出来了,这个窗口显示出来,盖住其他非topmost窗口时,必然会引发其他窗口产生wm_paint消息重绘,对于其他TOPMOST窗口而言,只有带最小化按钮的TOPMOST窗口才会以最小化窗口方式缩到任务栏,如果不带最小化按钮的topmost窗口,则不受显示桌面按钮影响) http://bbs.csdn.net/topics/390047783?page=1#post-393080009
ioridf 2012-12-01
  • 打赏
  • 举报
回复
亲,确切的说,某些情况下是你说的这样,比如任务管理器,设置为前端显示,你用spy++抓出来的消息情况可以看出来是最小化了,但你用MFC创建一个基于对话框(无最小化、最大化按钮),你拦截一下消息看看就知道不是你想的那么简单了。
gfm688 2012-12-01
  • 打赏
  • 举报
回复
不是隐藏,只是最小化 SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧