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

最佳答案

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

因此,如果您的文档 View 创建了63个或更多的USER objects(窗口,图标,光标等)或GDI objects(位图,笔,画笔,字体等),则MFC将抛出 CResourceException 异常,如果您未明确处理,则应用程序将由于未处理而中止异常(exception)。

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

有关详细信息,请参见这篇出色的文章:Pushing the Limits of Windows: USER and GDI Objects

关于c++ - MFC-一次打开许多框架,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13046734/

10-12 21:55