退出程序的标准方法是什么呢?我觉得所谓的标准方法,是要使程序能够做一些清理工作,而不是暴力退出,从而引起内存泄露和资源泄露。
那么现在我们要用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 是一个开源的 C++ 库,它允许开发者使用标准的 C++ 编程语法创建跨平台的图形用户界面(GUI)应用程序。这个库提供了丰富的控件集和功能,使得开发者可以编写一次代码,就能在多个操作系统上运行,包括 ...
wxWidgets是一个成熟的跨平台C++库,它允许开发者使用一套代码来创建图形用户界面(GUI)程序,这些程序能够在Windows、Linux、Mac OS X等多个操作系统上运行。在深入了解如何使用wxWidgets进行程序开发之前,有必要...
《使用wxWidgets进行跨平台程序开发》是一本深入讲解如何利用wxWidgets库构建跨平台应用程序的专业书籍。wxWidgets是一个开源的C++库,它允许开发者使用标准的C++语法编写一次代码,然后在多种操作系统上运行,包括...
- `OnExit()` 函数:在应用程序退出前调用,通常用于清理和关闭资源。 - `CreateFrame()`:创建并显示 `wxFrame` 对象,它是用户界面的主要部分。 7. **扩展到Ribbon界面** "慢慢改成 ribbon" 提到了将简单窗口...
# 基于C++和wxWidgets的安川控制器程序导入导出系统 ## 项目简介 安川控制器程序导入导出系统(Yaskawa Controller Program Import and Export System,简称Ycpies)是一个用于管理和操作安川控制器程序的图形用户...
这本书深入浅出地介绍了wxWidgets库的使用方法,结合书中提供的源码,读者可以更好地理解和实践跨平台程序设计。 首先,wxWidgets库的核心特性在于它的跨平台性。通过封装各操作系统的原生API,wxWidgets提供了一致...
标题与描述:“wxwidgets_跨平台程序开发” wxWidgets是一种跨平台的C++图形用户界面(GUI)工具包,它允许开发者创建具有本地外观和感觉的应用程序,而无需修改代码即可在多个操作系统上运行。这一特性使得...
使用wxWidgets进行跨平台程序开发。wxWidgets是一个给程序员使用的开发包,这个开发包用来开发用于桌面电脑或者移动设备的GUI(图形用户界面,下同)应用程序。它提供了一个编程框架,作了很多底层的工作以便给应用程序...
基于WxWidgets的跨平台GUI程序开发(中英对照版)
基于WxWidgets的跨平台GUI程序开发(中英对照版)
wxwidgets是一个 c++编写的用来提供gui开发的框架。它包含一个可以支持现今几乎所有操作系统(Version 2 currently supports all desktop versions of MS Windows, Unix with GTK+, Unix with Motif, and MacOS. An ...
**wxWidgets 框架详解** wxWidgets 是一个开源的 C++ 类库,它使得开发者可以使用纯 C++ 代码编写跨平台的应用程序。这个框架支持 Windows、macOS、Linux 以及更多的操作系统,实现了与本机环境的深度集成,提供了...
WxWidgets提供了一系列的类,这些类代表了GUI应用程序的各种元素,如窗口(`wxWindow`)、框架(`wxFrame`)、面板(`wxPanel`)、按钮(`wxButton`)等。通过继承这些类并重写某些方法,你可以实现自定义的行为。 ...
1. 很多程序需要根据处理业务的进度来更新进度条,进度条的目的是让用户能知道业务处理的进度,有进度条的程序更友好,让用户知道程序在运行,而不是没有响应。 博文: ...
wxWidgets是一个流行的跨平台C++库,它提供了丰富的GUI(图形用户界面)组件,使得开发者能够轻松地创建具有吸引力的桌面应用程序。 首先,我们要理解"基于wxbutton使用自定义Button创建菜单按钮"这一概念。...