C++ CDialogEx中的CMFCRibbonBar
在我的CDialogEx类中,我试图插入一个CMFCRibbonBar,但我得到一个空指针异常(我的try/catch块没有捕获到该异常): 确切的异常显示为:“mfcRibbonTest.exe中0x00d191db处的未处理异常:0xC0000005:访问冲突读取位置0x00000000”,afxribbonbar.cpp:964中出现中断C++ CDialogEx中的CMFCRibbonBar,c++,mfc,dialog,ribbon,C++,Mfc,Dialog,Ribbon,在我的CDialogEx类中,我试图插入一个CMFCRibbonBar,但我得到一个空指针异常(我的try/catch块没有捕获到该异常): 确切的异常显示为:“mfcRibbonTest.exe中0x00d191db处的未处理异常:0xC0000005:访问冲突读取位置0x00000000”,afxribbonbar.cpp:964中出现中断 我进行了多次搜索,以查看是否可以在对话框中放置CMFCRibbonBar,但我的搜索没有结果。如果查看afxribbonbar.cpp,第964行,您将
我进行了多次搜索,以查看是否可以在对话框中放置CMFCRibbonBar,但我的搜索没有结果。如果查看afxribbonbar.cpp,第964行,您将看到以下内容:
LRESULT CMFCRibbonBar::OnPostRecalcLayout(WPARAM,LPARAM)
{
GetParentFrame()->RecalcLayout();
return 0;
}
这将提示您问题所在:GetParentFrame()返回NULL。通过查看上的文档,我们看到:“成员函数向上搜索父链,直到找到CFrameWnd(或派生类)对象。”
在您的情况下,没有任何CFrameWnd,这就是问题所在。归根结底,功能区条不是为了添加到对话框而设计的。这并不意味着不可能做到,但至少这将是一个复杂的过程
LRESULT CMFCRibbonBar::OnPostRecalcLayout(WPARAM,LPARAM)
{
GetParentFrame()->RecalcLayout();
return 0;
}