c++ - 主对话框在命令消息处理程序返回之前销毁

标签 c++ windows winapi user-interface wtl

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

BOOL OnInitDialog()
{
    init data...
}

void OnDestroy()
{
    destroy data...
}

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

void OnMenuExit()
{
    DestroyWindow();
}

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

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

最佳答案

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

关于c++ - 主对话框在命令消息处理程序返回之前销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11927622/

相关文章:

c++ - 如何在 Windows 上清理命名管道?

c++ - 返回 vector<Foo> 或 shared_ptr<vector<Foo>>?

c++ - C++ 的 C 包装器 : How to deal with C++ templates?

windows - Windows/cmd 上的可执行文件类型是什么?他们的优先事项是什么?

c# - 如何获取应用程序的事件 ChildWindow?

C++ WinAPI 读取进程内存

c++ - 为什么我的语法正确时我的代码输出为 0

c++ - 扩展编译器以在编译时评估 "complicated"函数(具有已知输入值),超出 `constexpr` 范围

c# - 有没有办法在不使用 COM 的情况下在 C# 中以编程方式遵循 Windows 文件系统快捷方式?

windows - 常见的 Windows 服务设计模式有哪些?