Когда вы получаете эти ошибки отладки, отладчик должен дать вам возможность просматривать исходный код (хотя старые версии Visual Studio могут доставить вам немало хлопот). Затем вы можете открыть «Стек вызовов» и отследить ошибку.
В этом случае отладчик, вероятно, сообщает вам, что CSplitterWndEx
ищет CFrameWnd
и не может его найти.
Вы можете получить свой собственный класс CMySplitterWndEx
и изменить код так, чтобы он возвращал главное диалоговое окно вместо возврата CFrameWnd
В качестве альтернативы, вы можете добавить окно фальшивой рамки следующим образом:
BOOL CSampleDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
CRect rc;
GetClientRect(&rc);
CFrameWnd *frame = new CFrameWnd;
CString framecls = AfxRegisterWndClass(0, NULL, NULL, NULL);
frame->Create(framecls, L"", WS_VISIBLE | WS_CHILD, rc, this);
m_wndSplitter.CreateStatic(frame, 2, 1);
m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CChild_NoteView), CSize(100, 100), NULL);
m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CChild_NoteView), CSize(100, 100), NULL);
rc.MoveToXY(0, 0);
m_wndSplitter.MoveWindow(rc);
m_wndSplitter.ShowWindow(SW_SHOW);
return TRUE;
}
Вы также можете добавить CCreateContext
.