C++ CDialogEx中的CMFCRibbonBar

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行,您将

在我的CDialogEx类中,我试图插入一个CMFCRibbonBar,但我得到一个空指针异常(我的try/catch块没有捕获到该异常):

确切的异常显示为:“mfcRibbonTest.exe中0x00d191db处的未处理异常:0xC0000005:访问冲突读取位置0x00000000”,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;
}