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