Dockable CScrollView в SDI

Используя VS2017, V15.6.2, неуправляемый C++:

Я знаю, что что-то упустил, но не могу понять это. Я хочу добавить элемент CDockablePane в существующее приложение SDI, которое уже имеет CScrollView в качестве основного вида. Мне нужно сделать панель представлением прокрутки. Я нашел некоторую информацию о том, как это сделать, но я не могу заставить его работать. Используя информацию из ответа от 2014 года под названием "MFC CView into CDockablePane", у меня есть два класса. CMapperPane, который наследуется от CDockablePane, и CMapperView, который наследуется от CScrollView. Таким образом, OnCreate для CMapperView выглядит так:

int CMapperPane::OnCreate (LPCREATESTRUCT lpCreateStruct)
{
  if (CDockablePane::OnCreate (lpCreateStruct) == -1)
    return -1;

  CRuntimeClass *pClass = RUNTIME_CLASS (CMapperView);

  // calling constructor using IMPLEMENT_DYNCREATE macro
  CMapperView *pView = (CMapperView*) pClass->CreateObject ();

     if (!pView->Create (NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect (0,0,0,0),
     this, AFX_IDW_PANE_FIRST, NULL)) {
    return -1;
  }
  return 0;
}

Затем в мейнфрейме я создаю панель:

strTitle = "Mapper";
if (!m_MapperPane.Create (strTitle, this,
    CRect (0, 0, 200, 200), TRUE, IDD_MAPPER_PANE, WS_CHILD)) {
    return -1;
}

m_MapperPane.EnableDocking (CBRS_ALIGN_ANY);
DockPane ((CBasePane*) &m_MapperPane, AFX_IDW_DOCKBAR_RIGHT);
m_MapperPane.ShowPane (TRUE, FALSE, TRUE);
RecalcLayout ();

CMapperPane был создан с помощью мастера классов из диалогового окна без элементов управления.

Панель сопоставления появляется и является присоединяемой, но я не могу понять, как получить OnInitialUpdate или функции рисования представления, которые будут вызваны. Я сделал аналогичную вещь для другой закрепляемой панели, которая просто имеет поле для редактирования, и это работает. Но мне не нужно было наследовать от CScrollView в этом.

Этот метод работает или я далеко от базы здесь? Ошибочно ли начинать с диалога при создании CMapperPane? Если так, как еще? Нужно ли представлению свой кадр? Если так, то как?

Спасибо русь

0 ответов

Другие вопросы по тегам