【发布时间】: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