aurain
技术文摘
posts - 137,  comments - 268,  trackbacks - 0

以下是对话框关闭时发送的不同消息:  
        1)点击OK按钮:OnOk-WM_DESTROY  
        2)   点击Cancel按钮:OnCancel-WM_DESTROY  
        3)   点击×按钮:WM_CLOSE-ONCANCEL-WM_DESTROY  
        4)   键盘ESC按键:OnCancel-WM_DESTROY  
        5)调用EndDialog(IDCANCEL),直接到WM_DESTROY消息  
  这些方式都可以的,要是你的关闭没有成功,那么一定是出现内存泄漏,你需要在WM_DESTROY消息中释放资源,应为WM_DESTROY消息是所有销毁方式都要发送的。

WM_CLOSE:

  在系统菜单里选择了“关闭”或者点击了窗口右上角的“X”按钮,你的窗口过程就会收到WM_CLOSE。DefWindowProc对WM_CLOSE的处理是调用DestroyWindow。当然,你可以不让DefWindowProc处理,而是自己处理,例如询问用户是否保存更改等。如果用户选择“取消”,你忽略此消息,那么程序照常运行;如果用户确认要退出,你就调用DestroyWindow。


WM_DESTROY:

  接下来,DestroyWindow完成窗口的清理工作,最后像窗口过程发送WM_DESTROY。对于WM_DESTROY,DefWindowProc不会处理。也就是说,你如果不处理这个消息,虽然你的窗口已经销毁,但进程并不会结束。一般处理WM_DESTROY时都是释放资源(例如申请的内存等),然后调用PostQuitMessage。

 

WM_QUIT:

  PostQuitMessage会发送WM_QUIT给消息队列。注意,WM_QUIT永远不会到达窗口过程,因为GetMessage得到WM_QUIT后就会返回FALSE,从而结束消息循环,最后进程结束,程序退出。

 

 

假设使用者执行HELLOWIN,并且使用者最终单击了 Close按钮,或者假设用键盘或鼠标从系统菜单中选择了 Close, DefWindowProc处理这一键盘或者鼠标输入,在检测到使用者选择了Close选项之后,它给窗口消息处理程序发送一条WM_SYSCOMMAND消息。WndProc将这个消息传给DefWindowProc。DefWindowProc给窗口消息处理程序发送一条WM_CLOSE消息来响应之。WndProc再次将它传给DefWindowProc。DestroyWindow呼叫DestroyWindow来响应这条WM_CLOSE消息。DestroyWindow导致Windows给窗口消息处理程序发送一条WM_DESTROY消息。WndProc再呼叫PostQuitMessage,将一条WM_QUIT消息放入消息队列中,以此来响应此消息。这个消息导致WinMain中的消息循环终止,然后程序结束。

 

posted on 2009-03-11 22:46 阅读(2530) 评论(1)  编辑 收藏 引用 所属分类: vc

FeedBack:
# re: vc知识点(窗体的关闭)
2009-03-12 08:54 | 择日而亡
好  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2014年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用链接

留言簿(17)

随笔分类(138)

随笔档案(137)

网络开发

最新随笔

搜索

  •  

积分与排名

  • 积分 - 493621
  • 排名 - 36

最新随笔

最新评论

阅读排行榜

评论排行榜