0

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

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 函数。

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

4

1 回答 1

2

使用功能区的 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 文件,然后选择“资源包含...”,您可以将其添加到那里。

那应该这样做。

于 2012-04-13T17:43:25.353 回答