Как получить CDocument для производного CMFCShellTreeCtl в программе Outlook Style MFC? - PullRequest
0 голосов
/ 07 января 2019

Я новичок в MFC и с помощью мастера создал приложение MFC в стиле "outlook". Я расширил CMFCShellTreetCtrl с помощью CMyShellTreeCtrl и имел переменные-члены данных, и все работало нормально. Теперь я хочу переместить данные в класс CDocument. Поскольку существует несколько обращений к данным при щелчке или перечислении каждого элемента, я подумал, что создам переменную-член m_pDoc для доступа к общедоступным переменным в CDocument. У меня проблема, я не могу найти, где взять CDocument, так как кажется, что он не настроен при вызове деревьев OnCreate. То есть в OnCreate

CWnd* pWndMain = AfxGetMainWnd();
ASSERT(pWndMain);
ASSERT(pWndMain->IsKindOf(RUNTIME_CLASS(CFrameWnd)) &&  !pWndMain->IsKindOf(RUNTIME_CLASS(CMDIFrameWnd))); // Not an SDI app.
m_pDoc = (CMyDoc*) ((CFrameWnd*)pWndMain)->GetActiveDocument();

возвращает NULL в m_pDoc, и если я попытался в AfterCreate() (который вызывается после CreateOutlookBar), это слишком поздно, так как m_pDoc уже используется и выдает сбой.

    // Create and setup "Outlook" navigation bar:
    if (!CreateOutlookBar(m_wndNavigationBar, ID_VIEW_NAVIGATION, m_wndTree, m_wndCalendar, 250))
    {
        TRACE0("Failed to create navigation pane\n");
        return -1;      // fail to create
    }
  m_wndTree.AfterCreate();

Есть идеи?

ТИА !!

1 Ответ

0 голосов
/ 08 января 2019

Я придумал следующее, но я не уверен, что это правильный путь. Опять же, я новичок в MFC (я всегда использовал Win32 напрямую). Это работает так, что это AN ответ, но это THE правильный ответ?

  POSITION docpos = AfxGetApp()->GetFirstDocTemplatePosition();
  CDocTemplate *doctemplate = AfxGetApp()->GetNextDocTemplate(docpos);
  docpos=doctemplate->GetFirstDocPosition();
  m_pDoc = (CMyDoc*)doctemplate->GetNextDoc(docpos);
  ASSERT(m_pDoc);
  ASSERT(m_pDoc->IsKindOf(RUNTIME_CLASS(CMyDoc)));

ТИА !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...