Use*_*ser 19 c++ mfc exit quit
使用Windows MFC C++.我有一个第三方应用程序,它在我的CWinApp派生类中调用用户定义的方法.在InitInstance()之后调用此方法.如果此方法中存在错误,则抛出异常并捕获到try/catch块中,我想从catch块退出应用程序.什么是规范和正确的退出方式?
更新:
Serge我认为是正确的,在InitInstance()中返回false是退出应用程序的正确方法.但是,现在假设我想从CDialog派生类的OnInitDialog()处理程序退出,这是正确的方法.
更新2
对我来说,我发现调用PostMessage(WM_CLOSE)是我的非模态CDialog派生类的最佳方法.我试过的所有其他戒烟方法都会在某些情况下引发一些例外情况.
这是我如何使用它的一个例子:
BOOL SomeDialog::OnInitDialog()
{
CDialog::OnInitDialog();
::OleInitialize(nullptr);
try
{
// ...load settings file here
}
catch(...)
{
PostMessage(WM_CLOSE);
return TRUE;
}
// return TRUE unless you set the focus to a control
return TRUE;
}
Run Code Online (Sandbox Code Playgroud)
Ser*_*ier 29
在InitInstance()中
在您还在的时候退出应用程序InitInstance():只需FALSE从中退出InitInstance().
在主消息循环中
如果你已经在消息循环中,这是另一个故事:关闭应用程序的标准方法是退出消息循环:
PostQuitMessage(0)顾名思义,发布WM_QUIT消息.消息循环通过退出循环并关闭程序来做出反应.
但你不应该这样做:你应该关闭应用程序中打开的窗口.假设你只有你的主窗口,你应该通过调用来销毁它
m_pMainWindow->DestroyWindow();
Run Code Online (Sandbox Code Playgroud)
MFC将为PostQuitMessage()您做出反应,因此退出主消息循环并关闭您的应用程序.
更好的是,你应该张贴一个WM_CLOSE让你的主窗口优雅地关闭.例如,它可以决定保存当前文档.请注意:标准OnClose()处理程序可能会提示用户保存脏文档.用户甚至可以使用此提示取消关闭操作(保存文档?是,否,取消).
销毁主窗口会WM_DESTROY向其发送消息.MFC通过调用PostQuitMessage(0)退出消息泵来做出反应.(实际上,MFC进行调用,OnNcDestroy()因为WM_NCDESTROY这是窗口收到的绝对最后消息)
基于对话的应用程序
无论如何,调用EndDialog(-1);//或替换-1IDCANCEL
您可能知道,此调用将关闭对话框.
请注意,基于对话框的应用程序的主对话框在InitInstance()中执行.关闭对话框只会退出InitInstance(),它总是FALSE在这样的项目中返回.
lee*_*ade 10
只需使用:
PostQuitMessage(0);
Run Code Online (Sandbox Code Playgroud)
请记住,您的程序不会立即退出此调用,窗口/程序将收到WM_QUIT消息,然后您的程序将退出.