MFC单文档程序中按文件菜单的退出时,发出的具体消息是什么

时间:2022-06-12 21:01:05
因为自己也想实现那种退出方式,那种退出方式可以调用view类的ondestroy,也是就可以给其他类发送退出前的通知,现在我用的方法是把其他菜单中的菜单项的Id与"文件"->"退出"的id设为一样来实现的,功能也与文件->退出的一样,但还想了解一下内部机制,有明白的吗,多谢!

11 个解决方案

#1


或者说那种退出机制是怎样的呢,多谢!

#2


WM_CLOSE ?

#3


WM_CLOSE没有把程序给关闭,但也调用了view类的ondestroy()
从view类中直接发出WM_QUIT,什么都没调用就直接退出了。

#4


WM_CLOSE -> DestroyWindow() -> WM_DESTORY -> PostQuitMessage() -> WM_QUIT

#5


引用 4 楼 visualeleven 的回复:
WM_CLOSE -> DestroyWindow() -> WM_DESTORY -> PostQuitMessage() -> WM_QUIT
这个我也知道,只是想测试一下是不是那样的,好像结果不是。
就是从view类中发出WM_CLOSE之后,先调用onclose,再ondestroy,就没什么反应了,最后,程序没有退出。

#6


引用 5 楼 nacee 的回复:
引用 4 楼 visualeleven 的回复:
WM_CLOSE -> DestroyWindow() -> WM_DESTORY -> PostQuitMessage() -> WM_QUIT
这个我也知道,只是想测试一下是不是那样的,好像结果不是。
就是从view类中发出WM_CLOSE之后,先调用onclose,再ondestroy,就没什么反应了,最后,程序没有退出。

你在View里直接PostMessage(WM_CLOSE, 0, 0);这样调用的?
你应该调用AfxGetMainWnd()->PostMessage(WM_CLOSE, 0, 0);

#7


即WM_CLOSE消息应该是发送给主框架窗口的,你看你的App类的InitInstance函数中m_PMainWnd的值是哪个不就很清楚了

#8


楼上说的是,要整个程序退出,自然要销毁主框架窗口,WM_CLOSE消息应发给CMainFrame窗口

#9


QUIT

#10


嗯!醒悟了。

#11


不好意思,好像给分给错人了。

#1


或者说那种退出机制是怎样的呢,多谢!

#2


WM_CLOSE ?

#3


WM_CLOSE没有把程序给关闭,但也调用了view类的ondestroy()
从view类中直接发出WM_QUIT,什么都没调用就直接退出了。

#4


WM_CLOSE -> DestroyWindow() -> WM_DESTORY -> PostQuitMessage() -> WM_QUIT

#5


引用 4 楼 visualeleven 的回复:
WM_CLOSE -> DestroyWindow() -> WM_DESTORY -> PostQuitMessage() -> WM_QUIT
这个我也知道,只是想测试一下是不是那样的,好像结果不是。
就是从view类中发出WM_CLOSE之后,先调用onclose,再ondestroy,就没什么反应了,最后,程序没有退出。

#6


引用 5 楼 nacee 的回复:
引用 4 楼 visualeleven 的回复:
WM_CLOSE -> DestroyWindow() -> WM_DESTORY -> PostQuitMessage() -> WM_QUIT
这个我也知道,只是想测试一下是不是那样的,好像结果不是。
就是从view类中发出WM_CLOSE之后,先调用onclose,再ondestroy,就没什么反应了,最后,程序没有退出。

你在View里直接PostMessage(WM_CLOSE, 0, 0);这样调用的?
你应该调用AfxGetMainWnd()->PostMessage(WM_CLOSE, 0, 0);

#7


即WM_CLOSE消息应该是发送给主框架窗口的,你看你的App类的InitInstance函数中m_PMainWnd的值是哪个不就很清楚了

#8


楼上说的是,要整个程序退出,自然要销毁主框架窗口,WM_CLOSE消息应发给CMainFrame窗口

#9


QUIT

#10


嗯!醒悟了。

#11


不好意思,好像给分给错人了。