我有一个MFC MDI应用程序,其中文档可以有多个视图,用户可以自定义视图的布局数据,然后保存这些数据。这些数据与视图关联,而不是与文档关联。
如果用户选择关闭未保存布局更改的视图,并且遇到问题,我想提示用户保存,因为MFC似乎只适合文档中的更改。以下是我尝试过的一些方法:
1.重写CDocument::SaveModified函数,当文档关闭时框架调用该函数,在该函数中,我向文档的所有视图发送消息,然后这些视图可以检查未保存的更改并提示用户。
1.在视图的析构函数中执行检查。
1.在视图的OnClose处理程序中执行检查
这些方法都有问题。(1)是最好的,但是它不能处理一个文档上有多个视图,用户关闭其中一个视图的情况。因为文档仍然打开,所以不调用SaveModified。
(2)的问题是在应用程序关闭时,在调用任何CView析构函数之前,应用程序已经消失。这可能会在桌面上留下一个孤立的对话框。如果我尝试在OnDestroy中执行检查,也会出现这种情况。
我不能让(3)起作用--我不能让我的视图响应WM_CLOSE。
目前,我最好的解决方案是同时执行(1)和(2),但这需要一些糟糕的逻辑来防止应用程序在关闭时提示用户保存视图更改两次。
有人知道更好的方法吗?正确的挂钩位置在哪里?
2条答案
按热度按时间ibps3vxo1#
我不确定这是否是你的解决方案,但是我有几个视图不能按条件关闭,我在
DestroyWindow( )
中处理它们。在应用程序关闭之前,会出现一个消息框。所以尝试使用DestroyWindow( )
而不是析构函数。tsm1rwdh2#
同意。
它不会阻止窗口关闭,但问题并没有要求关闭窗口。