退出程序的标准方法是什么呢?我觉得所谓的标准方法,是要使程序能够做一些清理工作,而不是暴力退出,从而引起内存泄露和资源泄露。
那么现在我们要用wxDec-C++创建一个基于wxDialog的程序,为了验证程序是否标准退出,那么我们要在wxAPP对象的OnExit()事件中写上一个MessageBox,用来代表清理代码。
int test1DlgApp::OnExit()
{
MessageBox(0,"OnExit","OnExit",MB_OK);
return 0;
}
同样的,我们也应该在主窗口的OnClose事件中写上一个MessageBox,代表清理代码:
void test1Dlg::OnClose(wxCloseEvent& /*event*/)
{
MessageBox(0,"OnClose","OnClose",MB_OK);
Destroy();
}
好,按么现在在主窗体上放上一个按钮,然后编写按钮的click事件的处理代码:
/*
* WxButton1Click
*/
void test1Dlg::WxButton1Click(wxCommandEvent& event)
{
// insert your code here
//ExitProcess(0);
// this->EndModal(true);
::PostMessage((HWND__ *)this->GetHandle(),WM_CLOSE,0,0);
//::PostMessage((HWND__ *)this->GetHandle(),WM_QUIT,0,0);
//exit(0);
}
这里展现了五种退出程序的方法,但是仅仅有一种能够同时引发OnClose和OnExit事件,那就是:
::PostMessage((HWND__ *)this->GetHandle(),WM_CLOSE,0,0);
这两种方法:ExitProcess(0);exit(0);都是强制结束了程序,没有引发OnClose和OnExit事件;
而方法:this->EndModal(true);则仅仅是隐藏了窗口,并没有使程序退出;
方法:::PostMessage((HWND__ *)this->GetHandle(),WM_QUIT,0,0);则仅仅引发了OnExit事件,却没有引发OnClose事件。发送WM_QUIT消息和发送WM_CLOSE消息的区别是什么呢?为什么会引起截然不同的效果,我上网查找资料找到了答案:
“WM_CLOSE发给窗口或线程/进程通知关闭窗口或退出线程/进程。
你可以处理WM_CLOSE消息。
WM_QUIT通知退出线程/进程,你不能处理WM_QUIT消息,因为它使GetMessage返回0,从而使线程/进程退出。”
原来区别就在于,WM_QUIT使GetMessage函数返回0,而windows应用程序的消息循环是一个while循环,GetMessage返回为真才会继续循环下去,如果返回0,会直接结束while循环。而WM_CLOSE消息就不同了,它会使消息循环先处理WM_CLOSE消息,这样就可以引发OnClose()事件了,因为OnClose函数就是WM_CLOSE消息的响应函数。
相关推荐
全书共有20章,第·1·章简要介绍了·wxWidgets·的发展历史和框架结构,第2章介绍了wxWidgets的程序框架及其实现,第3章深入剖析了wxWidgets的事件处理机制,第4~11章详细讲述了wxWidgets的图形用户界面、数据结构...
基于WxWidgets的跨平台GUI程序开发(中英对照版)
基于WxWidgets的跨平台GUI程序开发(中英对照版)
这是一部学习wxWidgets的基础文档,能够让你快速的学习
基于WxWidgets的跨平台GUI程序开发(中英对照版)
中文教程,目录详细,使用wxWidgets进行跨平台程序开发
wxwidgets_跨平台程序开发
《使用wxWidgets进行跨平台程序开发》一书中提到的所有的例子源码,参见例子看书,希望各位有用。是原版光盘中的整个example目录。
wxwidgets是一个 c++编写的用来提供gui开发的框架。它包含一个可以支持现今几乎所有操作系统(Version 2 currently supports all desktop versions of MS Windows, Unix with GTK+, Unix with Motif, and MacOS. An ...
《使用wxWidgets进行跨平台程序开发》一书中提到的所有的例子源码,参见例子看书,希望各位有用。是原版光盘中的整个example目录。
使用wxWidgets进行跨平台程序开发。wxWidgets是一个给程序员使用的开发包,这个开发包用来开发用于桌面电脑或者移动设备的GUI(图形用户界面,下同)应用程序。它提供了一个编程框架,作了很多底层的工作以便给应用程序...
使用WxWidgets进行跨平台程序开发
使用wxWidgets进行跨平台程序开发随书源码
vs2015下编译的静态库,必须配合wxWidgets使用,运行库必须选择MT或MTD
《使用wxWidgets进行跨平台程序开发》,WX开发教程。没什么好说的,新手老手都必备的。
wxWidgets是一个开源的跨平台的C 构架库(framework),它可以提供GUI(图形用户界面)和其它工具。目前的2.x版本支持所有版本的Windows、带GTK 或...这份资料是谈如何使用wxWidgets进行跨平台程序开发的中文版教程。
为什么使用 wxWindows? 你希望使用C++编写的同一个程序能够运行在 Windows, Linux ...这表示如果一个程序是在Windows下编译的将有典型的windows程序的外观与行为, 当它在Linux下编译时它将拥有linux程序的外观与行为。
自己联系第一个wx 程序 慢慢改成ribbon
《使用wxWidgets进行跨平台程序开发》一书中提到的所有的例子源码,参见例子看书,希望各位有用。是原版光盘中的整个example目录。 还有中文PDF教程。