1

我有一个 C++ mfc 应用程序,我正在尝试使用 CMultiDocTemplate 一次打开许多文档。我发现应用程序在我为第 157 个文档调用 InitialUpdateFrame 时立即崩溃。谁能告诉我这个限制在哪里?非常感谢!

4

1 回答 1

3

最可能的原因 - 您达到了 Windows USER 或 GDI 对象限制。默认情况下,进程不能创建超过 10000 个 USER 和 10000 个 GDI 对象。如果您的文档视图包含大量控件/图形对象,则很容易超出限制。10000 / 157 = 63。

因此,如果您的文档视图创建了 63 个或更多USER 对象(窗口、图标、光标等)或GDI 对象(位图、钢笔、画笔、字体等),MFC 将抛出CResourceException异常,如果您不明确处理它,应用程序将因以下原因中止未处理的异常。

很容易检查这是否是您问题的真正根本原因。打开任务管理器,选择Processes选项卡,在菜单View->Select columns...检查USER ObjectsGDI Objects. 运行您的应用程序并查看您的应用程序进程消耗的对象数。

有关详细信息,请参阅这篇出色的文章:突破 Windows 的限制:USER 和 GDI 对象

于 2012-10-24T10:29:13.810 回答