我有一个 MFC MDI 应用程序,其中文档可以有多个视图,并且用户可以自定义然后保存视图的布局数据。此数据与视图相关联,而不是与文档相关联。
如果用户选择关闭具有未保存的布局更改的视图并且遇到问题,我想提示用户进行保存,因为 MFC 似乎只针对文档中的更改。以下是我尝试过的一些方法:
覆盖 CDocument::SaveModified 函数,该函数在文档关闭时由框架调用。在这个函数中,我向所有文档视图发送消息,然后它们可以检查未保存的更改并提示用户。
在 View 的析构函数中执行检查。
在 View 的 OnClose 处理程序中执行检查
这些方法中的每一个都有问题。(1) 是最好的,但它无法处理一个文档有多个视图,而用户关闭其中一个视图的情况。由于文档仍处于打开状态,因此不会调用 SaveModified。
(2) 的问题是,在应用程序关闭时,应用程序在调用任何 CView 析构函数时已经消失。这可能会在桌面上打开一个孤立的对话框。如果我尝试在 OnDestroy 中执行检查,情况也是如此。
我无法让 (3) 工作 - 我无法让我的观点回应 WM_CLOSE。
目前,我最好的解决方案是同时执行 (1) 和 (2),但这需要一些臭逻辑来防止应用程序在应用程序关闭时提示用户两次保存视图更改。
有人知道这样做的更好方法吗?正确的挂机位置在哪里?