MFC创建的对话框怎么找不到WM_NCDESTROY消息?
只有WM_DESTROY消息,但是找不到WM_NCDESTROY消息,我看别人创建的对话框貌似有这个消息阿,是不是哪设置不对,先谢谢了.1楼貌似没有回答我的问题啊,这个消...
只有WM_DESTROY消息,但是找不到WM_NCDESTROY消息,我看别人创建的对话框貌似有这个消息阿,是不是哪设置不对,先谢谢了.
1楼貌似没有回答我的问题啊,这个消息干什么用的我知道,但是就是找不到啊 展开
1楼貌似没有回答我的问题啊,这个消息干什么用的我知道,但是就是找不到啊 展开
3个回答
展开全部
在窗口销毁时有两个紧密关联的 windows 消息, 就是 WM_DESTROY 和 WM_NCDESTROY.
区别就是 WM_DESTROY 消息是在窗口销毁动作序列中的开始被发送的, 而 WM_NCDESTROY 消息是在结尾. 这在你的窗口拥有子窗口时是个重大区别. 如果你有一个带子窗口的父窗口, 那么消息的发送序列 (在没有怪诞行为影响的前提下) 就像这样:
hwnd = parent, uMsg = WM_DESTROY
hwnd = child, uMsg = WM_DESTROY
hwnd = child, uMsg = WM_NCDESTROY
hwnd = parent, uMsg = WM_NCDESTROY
注意, 父窗口是在子窗口被销毁之前收到 WM_DESTROY 消息, 在子窗口被销毁之后收到 WM_NCDESTROY 消息.
两个销毁消息, 一个在开头, 一个在结尾, 这意味着, 对于你自己的模块, 你可以通过处理相应的消息来执行清理操作.
例如, 如果有些东西必须在开头清理, 那么你可以使用 WM_DESTROY 消息.
WM_NCDESTROY 消息是你窗口将会收到的最后一个消息 (在没有怪诞行为影响的前提下), 因此, 这里是做 "最终清理" 的最佳场所.
这就是为什么我们的 new scratch 程序会一直等到 WM_NCDESTROY 销毁它的实例变量, 才会返回.
与这两个销毁消息配对的, 是 WM_CREATE 和 WM_NCCREATE 这两个类似的消息. 与 WM_NCDESTROY 是你窗口收到的最后一条消息类似,
WM_NCCREATE 消息是第一条消息, 这是一个创建你自己的实例变量的好地方. 需要注意的是, 如果你导致 WM_NCCREATE 消息返回失败,
那么所有你将收到的消息就只有 WM_NCDESTROY 了; 不会有 WM_DESTROY 消息了, 因为你根本就没有收到相应的 WM_CREATE 消息.
区别就是 WM_DESTROY 消息是在窗口销毁动作序列中的开始被发送的, 而 WM_NCDESTROY 消息是在结尾. 这在你的窗口拥有子窗口时是个重大区别. 如果你有一个带子窗口的父窗口, 那么消息的发送序列 (在没有怪诞行为影响的前提下) 就像这样:
hwnd = parent, uMsg = WM_DESTROY
hwnd = child, uMsg = WM_DESTROY
hwnd = child, uMsg = WM_NCDESTROY
hwnd = parent, uMsg = WM_NCDESTROY
注意, 父窗口是在子窗口被销毁之前收到 WM_DESTROY 消息, 在子窗口被销毁之后收到 WM_NCDESTROY 消息.
两个销毁消息, 一个在开头, 一个在结尾, 这意味着, 对于你自己的模块, 你可以通过处理相应的消息来执行清理操作.
例如, 如果有些东西必须在开头清理, 那么你可以使用 WM_DESTROY 消息.
WM_NCDESTROY 消息是你窗口将会收到的最后一个消息 (在没有怪诞行为影响的前提下), 因此, 这里是做 "最终清理" 的最佳场所.
这就是为什么我们的 new scratch 程序会一直等到 WM_NCDESTROY 销毁它的实例变量, 才会返回.
与这两个销毁消息配对的, 是 WM_CREATE 和 WM_NCCREATE 这两个类似的消息. 与 WM_NCDESTROY 是你窗口收到的最后一条消息类似,
WM_NCCREATE 消息是第一条消息, 这是一个创建你自己的实例变量的好地方. 需要注意的是, 如果你导致 WM_NCCREATE 消息返回失败,
那么所有你将收到的消息就只有 WM_NCDESTROY 了; 不会有 WM_DESTROY 消息了, 因为你根本就没有收到相应的 WM_CREATE 消息.
展开全部
CWnd::OnNcDestroy
afx_msg void OnNcDestroy( );
Remarks
Called by the framework when the nonclient area is being destroyed, and is the last member function called when the Windows window is destroyed. The default implementation performs some cleanup, then calls the virtual member function PostNcDestroy.
Override PostNcDestroy if you want to perform your own cleanup, such as a delete this operation. If you override OnNcDestroy, you must call OnNcDestroy in your base class to ensure that any memory internally allocated for the window is freed.
afx_msg void OnNcDestroy( );
Remarks
Called by the framework when the nonclient area is being destroyed, and is the last member function called when the Windows window is destroyed. The default implementation performs some cleanup, then calls the virtual member function PostNcDestroy.
Override PostNcDestroy if you want to perform your own cleanup, such as a delete this operation. If you override OnNcDestroy, you must call OnNcDestroy in your base class to ensure that any memory internally allocated for the window is freed.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在view-》vclasswizard》找找,具体的记不得了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询