首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

OnOk OnCancel OnClose OnDestroy DestroyWindow?这些讯息和函数的关系

2012-11-01 
OnOk OnCancel OnClose OnDestroy DestroyWindow?这些消息和函数的关系?如题,到底如何调用才能真正的释放

OnOk OnCancel OnClose OnDestroy DestroyWindow?这些消息和函数的关系?
如题,到底如何调用才能真正的释放一个对话框的资源

[解决办法]
如果是对话框类(CDialog)在堆栈上创建的模态对话框, 需要在该对话框销毁的时候 调用DestroyWindow清除窗口对象,然后 delete 掉c++ 中 的对象。

http://blog.csdn.net/icefairy/archive/2009/11/12/4803116.aspx
[解决办法]
OnClose → OnOk|OnCancel → DestroyWindow → OnDestroy
[解决办法]
OnOK和OnCancel对模式对话框而言就能完全的关闭对话框,但是对非模式对话框只是将对话框隐藏,如果要关闭非模式对话框的话一定要调用DestroyWindow
[解决办法]

探讨
引用:
OnClose → OnOk|OnCancel → DestroyWindow → OnDestroy


感觉不对啊???



[解决办法]
1.如果用户按下窗体的“X”按钮,系统会发送WM_SYSCOMMAND的消息,其中窗体接受到的消息顺序为:
[SEND]WM_SYSCOMMAND (SC_CLOSE, 0x011503B3) 
[SEND]WM_CLOSE (0x00000000, 0x00000000) 
*[POST]WM_COMMAND (IDCANCEL, 0x000B0816) 
这里是OnClose函数调用了OnCancel函数

2.当用户按下对话框的OK按钮时,如果程序没有重载父对话框类的OnOK方法,那么先接受到WM_COMMAND消息,因为默认窗体过程会调用EndDialog函数,所以WM_CLOSE消息不会发送,也就是OnClose不会被调用

3.当用户按下对话框的OK按钮时,如果程序重载了父对话框类的OnOK方法,并且在子类的OnOK中没有调用父类的OnOK方法。那么对话框使用发送WM_CLOSE消息来关闭,此时EndDialog函数不会被调用。
首先接受WM_COMMAND消息,然后接受WM_CLOSE消息。这里是OnOK函数调用了OnClose函数

热点排行