关于 OnCloseQuery: 顺序、不能关机等

系统关闭窗体的事件顺序为:

  OnCloseQuery ----> OnClose ----> OnDestroy

下面的代码说明问题:

 

另外 从网友 http://echocancer.spaces.live.com/blog/cns!97776b41bf0a7f5d!141.entry 出摘的 文章:

 

程序不能关机?看看你在OnCloseQuery里是不是写了代码!
今天终于解决了程序不能关机的问题,都是OnCloseQuery惹得祸!
程序里有多个窗体,其中有两个在OnCloseQuery里写了处理代码,导致程序不能关机。
一开始我安网上找到的办法试图在主窗口中截获WM_QUERYENDSESSION消息然后返回Msg.Result=1。发现这个消息根本就没有传到主窗口来,后来我又怀疑是不是Application.OnMessage把这个消息给拦截掉了,后来发现也不是的。最后才弄清楚如果一个窗体的OnCloseQuery事件中如果写了代码那么WM_QUERYENDSESSION消息就传不过去了msg.result会返回0,关机事件也就停止了。因为程序中有两个窗体的OncloseQuery中都写了代码所以WM_QUERYENDSESSION消息根本就传不到主窗口。最后在那两个窗口中拦截WM_QUERYENDSESSION消息,强制将msg.result返回1就解决了问题。
 
这次的问题让我对windows的消息机制又有了更深的了解,所有的windows的广播消息都是逐窗口传递的。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值