调用LoadFrame()MFC,RIBBON,VS2008,C ++时断言失败

时间:2012-04-12 21:26:27

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

我正在将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函数。

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

1 个答案:

答案 0 :(得分: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文件,然后选择“资源包含...”,您可以将其添加到那里。

应该这样做。