我正在将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函数。
任何帮助将不胜感激。感谢。
答案 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文件,然后选择“资源包含...”,您可以将其添加到那里。
应该这样做。