2

我的程序使用无模式对话框与用户交互,并且还有一个托盘图标。用户可以使用托盘图标立即退出应用程序。

BOOL OnInitDialog()
{
    init data...
}

void OnDestroy()
{
    destroy data...
}

void OnSomeButton()
{
    CFileDialog dlg;
    ...
    dlg.DoModal(m_hWnd));
    access data...
    ...
}

void OnMenuExit()
{
    DestroyWindow();
}

问题是当我弹出一个模态对话框(OnSomeButton),然后使用托盘图标菜单退出时,主对话框首先被破坏,然后模态对话框返回,试图访问一些无效数据,导致崩溃。

我知道我可以在访问数据之前添加一些检查代码,但是还有其他方法吗?有什么方法可以确保 OnSomeButton() 在窗口销毁之前返回?

4

2 回答 2

3

您需要添加自己的应用程序级代码。这个问题没有系统支持,主要是因为可能有太多的特殊性,以至于没有通用的方法是可能的。

于 2012-08-13T02:46:56.417 回答
2

是的。当您从托盘菜单退出时,您可以向WM_CLOSE您的模态对话框发送一条或类似的消息,使其退出。即使您的主窗口在OnSomeButton返回之前被销毁,只要该函数的其余部分不访问任何类内部(成员变量等),您也可以。您可以通过让模态对话框的窗口进程在以这种方式关闭时返回“中止”代码或其他内容来确保这一点。

于 2012-08-13T03:04:01.513 回答