Windows中点击“关闭”button发生了什么?
2015-05-20 16:16
148 查看
对于Windows操作,当用户点击"关闭"button时,窗体函数就会收到一个WM_DESTROY消息。
窗体函数应该调用PostQuitMessage(0) 向消息队列插入一个WM_QUIT消息。GetMessage 假设从消息队列中取得的是WM_QUIT消息,它将返回0,从而导致消息循环结束,WinMain函数退出,整个应用程序退出。
仅仅要通过点击窗体右上角的“关闭”button,来关闭窗体并退出应用程序。能不能在结束应用程序之前弹出一个对话框,来确认一下我们的操作呢?
要做到这一点,首先要了解单击“关闭”button開始,一直到最后应用程序退出究竟发生了什么。事实上,这是一个非常“复杂”的过程,描写叙述例如以下:
1)单击窗体右上角的“关闭”button,系统向消息队列插入WM_CLOSE消息;
2)窗体函数调用DefWindowProc 处理WM_CLOSE消息:调用DestroyWindow() 函数;
3)窗体关闭,并向消息队列插入WM_DESTROY消息;
4)窗体函数函数处理WM_DESTROY消息:调用PostQuitMessage 函数,向消息队列插入WM_QUIT消息;
5)主函数的消息循环中的GetMessage获取WM_QUIT消息返回0,导致消息循环结束,进而WinMain函数结束,再进而整个进程结束。
我们能够从这个过程中看到三个消息:WM_CLOSE、WM_DESTROY、WM_QUIT。
WM_CLOSE代表用户希望结束应用程序;WM_DESTROY代表窗体的关闭;WM_QUIT代表进程的结束。
如何在结束应用程序之前弹出一个对话框,来确认一下我们的操作呢?能够在WndProc 中加入对WM_CLOSE的消息处理。代码例如以下:
效果例如以下:
关于窗体函数与消息处理机制: http://blog.csdn.net/sanqima/article/details/34427471
/article/2618111.html
窗体函数应该调用PostQuitMessage(0) 向消息队列插入一个WM_QUIT消息。GetMessage 假设从消息队列中取得的是WM_QUIT消息,它将返回0,从而导致消息循环结束,WinMain函数退出,整个应用程序退出。
仅仅要通过点击窗体右上角的“关闭”button,来关闭窗体并退出应用程序。能不能在结束应用程序之前弹出一个对话框,来确认一下我们的操作呢?
要做到这一点,首先要了解单击“关闭”button開始,一直到最后应用程序退出究竟发生了什么。事实上,这是一个非常“复杂”的过程,描写叙述例如以下:
1)单击窗体右上角的“关闭”button,系统向消息队列插入WM_CLOSE消息;
2)窗体函数调用DefWindowProc 处理WM_CLOSE消息:调用DestroyWindow() 函数;
3)窗体关闭,并向消息队列插入WM_DESTROY消息;
4)窗体函数函数处理WM_DESTROY消息:调用PostQuitMessage 函数,向消息队列插入WM_QUIT消息;
5)主函数的消息循环中的GetMessage获取WM_QUIT消息返回0,导致消息循环结束,进而WinMain函数结束,再进而整个进程结束。
我们能够从这个过程中看到三个消息:WM_CLOSE、WM_DESTROY、WM_QUIT。
WM_CLOSE代表用户希望结束应用程序;WM_DESTROY代表窗体的关闭;WM_QUIT代表进程的结束。
如何在结束应用程序之前弹出一个对话框,来确认一下我们的操作呢?能够在WndProc 中加入对WM_CLOSE的消息处理。代码例如以下:
//窗体函数,用于消息处理 LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam){ int nSel=0; switch(msg){ case WM_CLOSE: nSel=MessageBox(hWnd,L"你真的要退出吗?",szWindowTitle,MB_YESNO|MB_ICONQUESTION); if(nSel==IDYES) DestroyWindow(hWnd); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hWnd,msg,wParam,lParam); } }
效果例如以下:
关于窗体函数与消息处理机制: http://blog.csdn.net/sanqima/article/details/34427471
/article/2618111.html
相关文章推荐
- Windows中点击“关闭”按钮发生了什么?看了一堆,挑出来质量比较高的
- Windows中点击“关闭”按钮发生了什么?
- 从点击Button到弹出一个MessageBox, 背后发生了什么
- 从点击Button到弹出一个MessageBox, 背后发生了什么
- struct和class的区别 观察者模式 https连接 点击button收到点击事件,中间发生了什么
- 从点击Button到弹出一个MessageBox, 背后发生了什么(每个UI线程都有一个ThreadInfo结构, 里面包含4个队列和一些标志位)
- Android点击应用Icon发生了什么
- (MFC)关于点击窗口1的button弹出对话框2,关闭对话框2,需要点击两次对话框1的button才能弹出对话框2的问题
- 点击 Run 之后发生了什么?
- iOS开发--iOS App从点击到启动发生了什么
- 当你输入一个网址/点击一个链接,发生了什么?(以www.baidu.com为例)
- 不关闭Statement对象会发生什么
- (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
- WinForm中如何判断关闭事件来源于用户点击右上角的“关闭”Button
- 点击Android Studio 的build按钮后发生了什么?
- 点击一个网页链接,然后发生了什么?
- 当你输入一个网址/点击一个链接,发生了什么?(以www.baidu.com为例)
- 点击Android Studio 的build按钮后发生了什么?
- 用户鼠标点击屏幕一个链接后发生了什么
- Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)