我有一个 C++ mfc 应用程序,我正在尝试使用 CMultiDocTemplate 一次打开许多文档。我发现应用程序在我为第 157 个文档调用 InitialUpdateFrame 时立即崩溃。谁能告诉我这个限制在哪里?非常感谢!
问问题
540 次
1 回答
3
最可能的原因 - 您达到了 Windows USER 或 GDI 对象限制。默认情况下,进程不能创建超过 10000 个 USER 和 10000 个 GDI 对象。如果您的文档视图包含大量控件/图形对象,则很容易超出限制。10000 / 157 = 63。
因此,如果您的文档视图创建了 63 个或更多USER 对象(窗口、图标、光标等)或GDI 对象(位图、钢笔、画笔、字体等),MFC 将抛出CResourceException
异常,如果您不明确处理它,应用程序将因以下原因中止未处理的异常。
很容易检查这是否是您问题的真正根本原因。打开任务管理器,选择Processes
选项卡,在菜单View->Select columns...
检查USER Objects
和GDI Objects
. 运行您的应用程序并查看您的应用程序进程消耗的对象数。
有关详细信息,请参阅这篇出色的文章:突破 Windows 的限制:USER 和 GDI 对象。
于 2012-10-24T10:29:13.810 回答