none
窗口左上角的关闭按钮时触发什么窗口消息? RRS feed

  • 问题

  • 按照经验,窗口左上角的关闭按钮(就是那个叉),应该发WM_CLOSE消息,但是我在WM6 SDK开发中,发现按下后没有触发WM_CLOSE消息,程序一直处于运行状态,实际没有退出。

    不知道各位有没有试过,用WM6SDK的模板生产一个Win32工程后,运行并在WndProc中的循环处,设断点即可发现该问题,没有WM_CLOSE被触发和处理。

    现在这样有很大的问题,我自己程序的一些清理工作,虽然在WM_DESTROY中做了,但是如果用户是按关闭按钮的话,这些清理工作都没做,程序一直处于运行状态,实际没有退出。

    有哪位高人能出来解释一下吗?谢谢!

     

    2007年12月18日 14:34

答案

  •  

    我用的是WM5,也会有相同的问题。其实也不能说是问题,因为这就是WM5或者说WM6设计的窗口运行标准。不单是我们开发的程序是这样的,WM5或者WM6自带的资源管理器、IE、ActiveSync、日历、联系人等等都是这样的,照微软的说法是自主管理:即长时间不运行的程序会由系统自动销毁。这就是问题所在:有时我们希望程序关闭了就销毁,而由于WM的特性,你不能选择任务,如果都是点击关闭按钮了就销毁程序的话,程序间切换将出现不必要的程序销毁与重启的重复。

     

    因此,微软给了这个不是解决方法的方法。

     

    我的解决办法是根据需要使某些窗体的任务栏不显示,就是说要退出这个窗体,必须点击我设置的按钮,这样就可以依我的需要而销毁或者保留这些窗体了。当然,这只是一个暂时性的办法,而且影响程序的外观。

     

    希望找到更好的解决办法的朋友共同讨论一下!

    2007年12月19日 9:03

全部回复

  •  

    我用的是WM5,也会有相同的问题。其实也不能说是问题,因为这就是WM5或者说WM6设计的窗口运行标准。不单是我们开发的程序是这样的,WM5或者WM6自带的资源管理器、IE、ActiveSync、日历、联系人等等都是这样的,照微软的说法是自主管理:即长时间不运行的程序会由系统自动销毁。这就是问题所在:有时我们希望程序关闭了就销毁,而由于WM的特性,你不能选择任务,如果都是点击关闭按钮了就销毁程序的话,程序间切换将出现不必要的程序销毁与重启的重复。

     

    因此,微软给了这个不是解决方法的方法。

     

    我的解决办法是根据需要使某些窗体的任务栏不显示,就是说要退出这个窗体,必须点击我设置的按钮,这样就可以依我的需要而销毁或者保留这些窗体了。当然,这只是一个暂时性的办法,而且影响程序的外观。

     

    希望找到更好的解决办法的朋友共同讨论一下!

    2007年12月19日 9:03
  • 楼上的兄弟谢谢了,看来可能也只有你说的这个办法了,嘿嘿。

    看来微软的这个论坛人气还不算太差,希望大家有空多交流啊。

    2007年12月19日 14:33
  • 希望找到更好解决办法的朋友也讨论讨论。

    这个论坛人太少了,就靠版主和几个MVP在顶着,希望也能发展成英文MSDN Forums那样人气旺盛的局面,在那里真的学到了很多东西,包括求助和帮助。

    2007年12月20日 1:37
  •  

    把窗体的MinimizeBox属性设置成false,关闭按钮X就会变成OK,点下去窗体就会关闭了,而不是最小化。
    2007年12月26日 3:36
  • Vincent:正解!我刚刚尝试了一下。

    多谢多谢。又学了一点呵呵...希望大家多交流!

    2007年12月27日 1:02
  • 想学习别人的人很多,想帮助别人的人很少

    2008年1月30日 8:27
  • 那个其实是隐藏窗口的键,windows直接点他不会销毁窗口的

    建议你自己加WM_CLOSE消息

    2008年3月15日 3:12