【问题标题】:Assertion failure on calling LoadFrame() MFC, RIBBON, VS2008, C++调用 LoadFrame() MFC、RIBBON、VS2008、C++ 时断言失败
【发布时间】:2012-04-12 21:26:27
【问题描述】:

我正在将 MFC 功能区合并到现有的 SingleDoc 应用程序中。在 CMainFrame : public CFrameWndEx 类型的对象上调用方法 LoadFrame() 时出现断言失败

CMainFrame* pFrame = new CMainFrame;

if (!pFrame)return FALSE;

m_pMainWnd = pFrame;

// create and load the frame with its resources` 

pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, NULL);

断言在函数中抛出

CMFCRibbonCategory* CMFCRibbonBar::AddPrintPreviewCategory()

在行中

CString strLabel; ENSURE(strLabel.LoadString(IDS_AFXBARRES_PRINT_PREVIEW));

调用栈(这里只提到了函数调用)如下——

CMFCRibbonBar::AddPrintPrevieCategory()

CMFCRibbonBar::RecalcLayout()

CMFCRibbonBar::LoadState(const char * lpszProfileName=0x06bdf2f8, int nIndex=59398, unsigned int uiID=4294967295)

DockingManager::LoadState(const char * lpszProfileName=0x06bdf2f8, unsigned int uiID=128)

CFrameImpl::LoadDockState(const char * lpszSectionName=0x06bdf2f8)

CFrameImpl::OnLoadFrame()

CFrameWndEx::LoadFrame(unsigned int nIDResource=128, unsigned long dwDefaultStyle=13598720, CWnd * pParentWnd=0x00000000, CCreateContext * pContext=0x00000000)

App::InitInstance() - 在这个函数中我调用了 Loadframe

现在,我想知道如何解决这个问题,因为我所做的只是调用 LoadFrame 函数。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 我认为您需要确保包含功能区资源。从向导中创建一个新的功能区应用程序并查看 .rc 和 .rc2 文件。
  • msdn.microsoft.com/en-us/library/bb983935.aspx 可能有助于解决任何其他问题。
  • @ta.speot.is - 抱歉,我更改了抛出断言的详细信息。是的,我已经使用应用程序向导构建了另一个应用程序,并且还浏览了网上几乎所有可用的教程。我无法找到解决方案,这是非常不幸的。通过并排调试应用程序,我无法指出我的实现中究竟缺少什么。谢谢。
  • 所以,为了清楚起见,您已经查看了向导实现与您的实现中的.rc.rc2 文件,并且您的实现包括向导实现所做的功能区栏内容?
  • @ta.sepot.is - 是的,我已经尽可能地匹配了 .rc 和 .rc2。但是,与应用程序向导示例生成的 IDR_MAINFRAME 相比,我加载了不同的 IDR_MAINFRAME。另外,我在示例应用程序中也找不到资源IDS_AFXBARRES_PRINT_PREVIEW。我猜它是在运行时生成的。让我知道更多的指针。谢谢。

标签: c++ visual-studio-2008 mfc ribbon mfc-feature-pack


【解决方案1】:

使用功能区的 MFC 应用程序要求您为功能区包含一些资源文件。这些文件位于 VS 安装的 VC\atlmfc\include 子目录中。

我的猜测是您没有比较 .rc 文件,而是比较了 VS 中的资源项。这些线条很容易被忽略。

因此,您的主 .rc 文件中需要这两行:

#include "afxprint.rc" // printing/print preview resources

#include "afxribbon.rc" // MFC ribbon and control bar resources

您可以在 Visual Studio 中轻松做到这一点。进入“资源视图”并右键单击.rc文件,然后选择“资源包含...”,您可以将其添加到那里。

应该可以的。

【讨论】:

  • 所以基本上:我的第一条评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2015-06-30
相关资源
最近更新 更多