`
dqifa
  • 浏览: 116349 次
社区版块
存档分类
最新评论

wxWidgets框架下基于wxDialog程序的标准退出方法

 
阅读更多

退出程序的标准方法是什么呢?我觉得所谓的标准方法,是要使程序能够做一些清理工作,而不是暴力退出,从而引起内存泄露和资源泄露。
那么现在我们要用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消息的响应函数。


from:http://blog.csdn.net/qiqi5521/article/details/2306816

分享到:
评论

相关推荐

    wxWidgets跨平台程序开发

    全书共有20章,第·1·章简要介绍了·wxWidgets·的发展历史和框架结构,第2章介绍了wxWidgets的程序框架及其实现,第3章深入剖析了wxWidgets的事件处理机制,第4~11章详细讲述了wxWidgets的图形用户界面、数据结构...

    基于WxWidgets的跨平台GUI程序开发(中英对照版)Part1

    基于WxWidgets的跨平台GUI程序开发(中英对照版)

    使用wxwidgets进行跨平台程序开发(中文版)_wxWidgets学习_wxWidgets_

    wxWidgets 是一个开源的 C++ 库,它允许开发者使用标准的 C++ 编程语法创建跨平台的图形用户界面(GUI)应用程序。这个库提供了丰富的控件集和功能,使得开发者可以编写一次代码,就能在多个操作系统上运行,包括 ...

    使用wxWidgets进行跨平台程序开发 pdf

    wxWidgets是一个成熟的跨平台C++库,它允许开发者使用一套代码来创建图形用户界面(GUI)程序,这些程序能够在Windows、Linux、Mac OS X等多个操作系统上运行。在深入了解如何使用wxWidgets进行程序开发之前,有必要...

    《使用wxWidgets进行跨平台程序开发》光盘例子源码

    《使用wxWidgets进行跨平台程序开发》是一本深入讲解如何利用wxWidgets库构建跨平台应用程序的专业书籍。wxWidgets是一个开源的C++库,它允许开发者使用标准的C++语法编写一次代码,然后在多种操作系统上运行,包括...

    wxwidgets 第一个程序

    - `OnExit()` 函数:在应用程序退出前调用,通常用于清理和关闭资源。 - `CreateFrame()`:创建并显示 `wxFrame` 对象,它是用户界面的主要部分。 7. **扩展到Ribbon界面** "慢慢改成 ribbon" 提到了将简单窗口...

    (源码)基于C++和wxWidgets的安川控制器程序导入导出系统.zip

    # 基于C++和wxWidgets的安川控制器程序导入导出系统 ## 项目简介 安川控制器程序导入导出系统(Yaskawa Controller Program Import and Export System,简称Ycpies)是一个用于管理和操作安川控制器程序的图形用户...

    《使用wxWidgets进行跨平台程序开发》pdf + 光盘源码

    这本书深入浅出地介绍了wxWidgets库的使用方法,结合书中提供的源码,读者可以更好地理解和实践跨平台程序设计。 首先,wxWidgets库的核心特性在于它的跨平台性。通过封装各操作系统的原生API,wxWidgets提供了一致...

    wxwidgets_跨平台程序开发

    标题与描述:“wxwidgets_跨平台程序开发” wxWidgets是一种跨平台的C++图形用户界面(GUI)工具包,它允许开发者创建具有本地外观和感觉的应用程序,而无需修改代码即可在多个操作系统上运行。这一特性使得...

    使用wxWidgets进行跨平台程序开发

    使用wxWidgets进行跨平台程序开发。wxWidgets是一个给程序员使用的开发包,这个开发包用来开发用于桌面电脑或者移动设备的GUI(图形用户界面,下同)应用程序。它提供了一个编程框架,作了很多底层的工作以便给应用程序...

    基于WxWidgets的跨平台GUI程序开发(中英对照版)Part2

    基于WxWidgets的跨平台GUI程序开发(中英对照版)

    基于WxWidgets的跨平台GUI程序开发(中英对照版)Part3

    基于WxWidgets的跨平台GUI程序开发(中英对照版)

    gui开发框架wxwidgets

    wxwidgets是一个 c++编写的用来提供gui开发的框架。它包含一个可以支持现今几乎所有操作系统(Version 2 currently supports all desktop versions of MS Windows, Unix with GTK+, Unix with Motif, and MacOS. An ...

    使用wxWidgets进行跨平台程序开发随书源码

    **wxWidgets 框架详解** wxWidgets 是一个开源的 C++ 类库,它使得开发者可以使用纯 C++ 代码编写跨平台的应用程序。这个框架支持 Windows、macOS、Linux 以及更多的操作系统,实现了与本机环境的深度集成,提供了...

    使用WxWidgets进行跨平台程序开发

    WxWidgets提供了一系列的类,这些类代表了GUI应用程序的各种元素,如窗口(`wxWindow`)、框架(`wxFrame`)、面板(`wxPanel`)、按钮(`wxButton`)等。通过继承这些类并重写某些方法,你可以实现自定义的行为。 ...

    [wxWidgets]_[初级]_[常见更新进度条的方案]

    1. 很多程序需要根据处理业务的进度来更新进度条,进度条的目的是让用户能知道业务处理的进度,有进度条的程序更友好,让用户知道程序在运行,而不是没有响应。 博文: ...

    基于wxwidgets实现的自定义菜单

    wxWidgets是一个流行的跨平台C++库,它提供了丰富的GUI(图形用户界面)组件,使得开发者能够轻松地创建具有吸引力的桌面应用程序。 首先,我们要理解"基于wxbutton使用自定义Button创建菜单按钮"这一概念。...

Global site tag (gtag.js) - Google Analytics