CMFCRibbonBar внутри CDialogEx

В моем классе CDialogEx я пытаюсь вставить CMFCRibbonBar, но я получаю исключение NULL-указателя (которое не перехватывается моими блоками try / catch):

BOOL CmfcRibbonTestDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();

// Set the icon for this dialog.  The framework does this automatically
//  when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);         // Set big icon
SetIcon(m_hIcon, FALSE);        // Set small icon

// TODO: Add extra initialization here
try
{
m_wndRibbonBar.Create(this);
m_wndRibbonBar.LoadFromResource(IDR_RIBBON1);
}
catch( std::exception& exc )
{
this->MessageBoxA(exc.what(), "Couldn't create ribbon");
}

return TRUE;  // return TRUE  unless you set the focus to a control
}

Точное исключение говорит: «Необработанное исключение в 0x00d191db в mfcRibbonTest.exe: 0xC0000005: Место чтения нарушения доступа 0x00000000» и разрывается в afxribbonbar.cpp: 964.

Я сделал несколько поисков, чтобы увидеть, можно ли поместить CMFCRibbonBar в диалог, но мои поиски были неокончательными.

0

Решение

Если вы посмотрите на afxribbonbar.cpp, строка 964, вы увидите это:

LRESULT CMFCRibbonBar::OnPostRecalcLayout(WPARAM,LPARAM)
{
GetParentFrame()->RecalcLayout();
return 0;
}

Это должно дать вам подсказку о том, в чем проблема: GetParentFrame () возвращает NULL. Глядя на документацию на http://msdn.microsoft.com/en-us/library/6f45sskz(v=vs.100).aspx мы видим: «Функция-член ищет родительскую цепочку пока объект CFrameWnd (или производный класс) не найден

В вашем случае нет никакого CFrameWnd, так что это проблема. Суть в том, что полосы ленты не предназначены для добавления в диалоги. Это не значит, что это невозможно делать, но, по крайней мере, это будет вовлеченный процесс.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]