UpdateAllViews也调用OnSize

时间:2011-05-06 16:39:28

标签: mfc

我有一个MFC应用程序,它有文档/视图架构,但设置为只使用一个视图。到目前为止一切都很好。

我在文档中加载了一个文件,并认为通知视图新数据的最佳方法是在文件加载完成后调用UpdateAllViews()。它运作良好;我可以通过视图中的OnUpdate()函数将文档中的数据传输到视图。

然而,在调用OnUpdate() OnSize()之后,也会调用UpdateAllViews()。如果不是因为它是在窗口创建时使用的大小调用的,那么这不会成为问题。因此,如果我启动程序,调整窗口大小然后打开一个文件,窗口将弹回到它最初的大小!如果我最大化窗口,然后调用UpdateAllViews(),它会调整大小,同时仍然认为它已经最大化,所以我必须恢复它,然后才能再次改变它的大小。这非常烦人,我想知道是否有任何方法可以绕过它?也许我甚至不能以这种方式使用{{1}}?

1 个答案:

答案 0 :(得分:0)

好的,事实证明这不是UpdateAllViews()所致。无论何时在MFC中打开文档,都会发生这种情况。当你这样做时会发生很多事情,其中​​显然发送了一个resize-command。

此resize命令会将视图调整为其“文档”的大小(不要与文档/视图体系结构中的文档混淆)。就我而言(因为我的观点基于CFormView),文档大小就是表单的大小。

当您调整窗口大小时,默认情况下不会调整窗体的大小,我认为这是合乎逻辑的,因此每当视图的“刷新”发生时,它将调整其大小以适应其形式。

我通过在我的视图的SetScaleToFitSize()函数中调用OnSize()来解决这个问题,这导致不仅视图调整大小,而且每次调整视图大小时调整窗体本身。由于表单现在始终与视图具有相同的大小,因此每当打开文件时发送的大小更新都无效。