`
blogfeifei
  • 浏览: 1193672 次
文章分类
社区版块
存档分类
最新评论

WM_CLOSE WM_QUIT WM_DESTROY 三者的区别

 
阅读更多

WM_CLOSE WM_QUIT WM_DESTROY 三者的区别 收藏
一直以来,我都不是很明白这三个的区别,今天看了一写文章,才明白过来,一下是转载的文字:

有三个消息看起来差不多,都是处理关闭的事情的。它们是WM_DESTROY,WM_CLOSE,和WM_QUIT。它们的确很相似,但你需要知道它们之间的不同!一个窗口或者应用程序应该被关闭时发出WM_CLOSE消息,当接收到WM_CLOSE消息时,如果你愿意,向用户提出是否真的退出。你知道让用户作确认或有错误出现或有什么应该注意的事情发生的时候,往往弹出一个消息框。
插播消息框
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);

当收到WM_CLOSE消息,你可以做两件事儿。一件是你接受默认的处理返回一个值,你若这样做了,应用程序或窗口按照计划关闭;再者,你返回0,应用程序或窗口将保持原样。以下是代码的基本部分:
if (msg == WM_CLOSE)
{
if (MessageBox(hMainWindow, "Are you sure want to quit?", "Notice", MB_YESNO | MB_ICONEXCLAMATION) == IDNO)
return(0);
// otherwise, let the default handler take care of it
}

WM_DESTROY消息有点儿不同。它是窗口正在关闭时发出的。
当得到WM_DESTROY消息的时候,窗口已经从视觉上被删除。

一个主窗口被关闭,并不意味着应用程序结束了,它将在没有窗口的条件下继续运行。
然而,当一个用户关闭了主窗口,也就意味着他要结束应用程序,所以如果你希望应用程序结束,在收到WM_DESTROY消息的时候,你必须发出一个WM_QUIT消息。
WM_QUIT是应用程序结束发出的消息,一般可以看成进程被kill掉的情况.

PostQuitMessage是向系统发出要终止线程的请求, 在终止线程前系统还要做些内存的清理工作, 我们关闭一个程序时是发送WM_CLOSE消息, 然后调用DestroyWindow函数,调用DestroyWindow时系统会向程序发WM_DESTROY消息,终止整个程序


用自己的话总结一下:WM_CLOSE 消息发出的时候,用户可以根据自己的意愿来选择到底是否关闭WM_DESTORY 是真的关闭一个窗口。WM_QUIT是退出一个应用程序

(3个消息可按C,D,Q顺序记忆,刚好与字母顺序一致)

分享到:
评论

相关推荐

    WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数详解

    一、WM_CLOSE、WM_DESTROY、WM_QUIT区别 WM_CLOSE:关闭应用程序窗口 WM_DESTROY:关闭应用程序 WM_QUIT:关闭消息循环 只有关闭了消息循环,应用程序的进程才真正退出(在任务管理器里消失)。 win32应用程序的完整...

    Window 消息大全

    WM_CLOSE = $0010 //当一个窗口或应用程序要关闭时发送一个信号 WM_QUERYENDSESSION= $0011 //当用户选择结束对话框或程序自己调用ExitWindows函数 WM_QUIT= $0012 //用来结束程序运行或当程序调用postquitmessage...

    MFC消息映射详细介绍与实现

     除了键盘、鼠标消息以外,队列消息还有WM_PAINT、WM_TIMER和WM_QUIT。  这些队列消息以外的绝大多数消息是非队列消息。  系统消息和应用程序消息  从消息的来源来看,可以分为:系统定义的消息和应用程序定义...

    易语言-Windows消息大全易语言版转换程序

    要求一个窗口重画自己WM_CLOSE = 16;当一个窗口或应用程序要关闭时发送一个信号WM_QUERYENDSESSION = 17;当用户选择结束对话框或程序自己调用ExitWindows函数WM_QUIT = 18;用来结束程序运行或当程序调用...

    Python Selenium 之关闭窗口close与quit的方法

    selenium关闭窗口有两个方法,close与quit,我们稍作研究便知道这两个方法的区别。 1.看源码或API 这是close()的说明: Closes the current window. 关闭当前窗口。 这是quit()的说明: Quits the driver and ...

    selenium框架中driver.close()和driver.quit()关闭浏览器

    Windows系统上,每次运行完...webdriver中关浏览器关闭有两个方法,一个叫quit,一个叫close。 /** * Close the current window, quitting the browser if it's the last window currently open. */ void close(); /*

    opengl画图程序附带源代码

    MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP); return FALSE; // Return FALSE } } } if (fullscreen) // Are We Still In Fullscreen Mode? { dwExStyle=WS_EX_APPWINDOW; // ...

    VB-局域网简单聊天器.doc

    Private Sub cmd_connect_Click() '取得远端机IP,并请求连接 SockClient.RemoteHost =...Load() '服务器开始监听 SockServer.Listen End Sub Private Sub SockClient_Close() '激活连接按钮 cmd_connect.Enabled = Tru

    pb word 文字个数统计

    ole_word.quit() ole_word.disconnectobject() destroy ole_word return 1 end if if len(trim(ls_filename)) return -1 else ole_word.Documents.open(ls_filename) ll_cnt = ole_word....

    Count3Quit2.rar_count3Quit2_count3quit

    简单的数三退一算法。对于一个给定数目的数组,首尾相接。从第一个开始,数到三时,其位置的节点被去掉。依次每次数三个数,求出最后一个没被去掉的数

    gertt点阵图读取器(opengl)

    MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP); return FALSE; // Return FALSE } } } if (fullscreen) // Are We Still In Fullscreen Mode? { ...

    BoneAnimationOpenGL_flash_quit_20210820.rar

    openGL实现骨骼动画加载,用到的库有glut、glaux.lib,openGL32.lib,不是加载fbx,而是直接加载骨骼顶点、法线的数据

    网狐荣耀版 李逵劈鱼源码

    │ │ txt_shack_close.png │ │ txt_shack_open.png │ │ txt_sound_off.png │ │ │ └─sound_res │ beauty_0.wav │ beauty_1.wav │ beauty_2.wav │ beauty_3.wav │ big_10.wav │ big_11.wav │ big_12...

    在C#中SendMessage和PostMessage的参数传递

    Post WM_QUIT 时,应使用 PostQuitMessage 代替。 4、系统只整编(marshal)系统消息(0 到 WM_USER 之间的消息),发送用户消息(WM_USER 以上)到别的进程时,需要自己做整编。 用 PostMessage、...

    SDL_ttf技术

    SDL_ttf技术代码介绍SDL_FreeSurface( background ); SDL_FreeSurface( message );... //Close the font that was used TTF_CloseFont( font ); //Quit SDL_ttf TTF_Quit(); //Quit SDL SDL_Quit();

    c语言贪吃蛇源码(带注释)

    如果msg.message等于WM_QUIT,返回0,否则返回非0 { TranslateMessage(&msg);//将msg返回给windows已进行某些键盘消息的转换 DispatchMessage(&msg);//将msg再次返回给windows }*/ return msg.wParam;//msg....

    thl_r16_tinav2.0_hm1375验证通过_增加打印设备ID_20170824_1447.7z

    vfe_clk_close(dev); #endif vfe_print("probe_work_handle end!\n"); mutex_unlock(&probe_hdl_lock); return ; probe_hdl_rel_vdev: video_device_release(vfd); vfe_print("video_device_release @ probe...

    ATL Chapter04 Server&Client

    atl 开发指南第四张Server和Client的例子,但是运行时,Client返回错误,Server端自动退出,受到WM_QUIT消息

Global site tag (gtag.js) - Google Analytics