В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

Способы инициализации дочерних элементов управления в производных CDialogBar

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

185672
Аннотация
При создании простой CDialogBar, например с CButtons только аналогичныедля предварительного просмотра MFC необязательно должен быть производным от CDialogBarтак как родительский CControlBar получающую уведомления отвсе дочерние элементы управления.

Однако в случае использования более сложных CDialogBar, который, возможно, перейтиполе со списком, treeview или элемент управления ActiveX может быть использованаявляется производным от CDialogBar для инициализации для дочерних элементов управления.

Поскольку ClassWizard не поддерживает производный класс CDialogBar, этов статье показаны действия, необходимые для создания класса из класса CDialog и затем«преобразовать» класса CDialogBar.
Дополнительная информация
Для начала создания класса CDialog с дочерними элементами управления, которые требуетсяс помощью. Можно преобразовать в классе CDialogBar с помощью класса CDialogдевять шагов:

  1. Изменение базового класса из класса CDialog CDialogBar в классе объявление. Не забудьте также изменить базовый класс в BEGIN_MESSAGE_MAP в CPP-файле.
  2. Измените конструктор в файлах .cpp и .h. Также убедитесь, Измените значение на DoDataExchange(). Ниже приведены три элемента для изменения.

    Изменение следующих
          CMyDlgBar (CWnd* pParent = NULL);   // standard constructor      CMyDlgBar:: CMyDlgBar (CWnd* pParent /*=NULL*/)         : CDialog(CMyDlgBar::IDD, pParent)      {         ...      void CMyDlgBar::DoDataExchange(CDataExchange* pDX)      {         CDialog::DoDataExchange(pDX);         ...					
    Чтобы изменить следующим образом:
          CMyDlgBar ();   // standard constructor      CMyDlgBar:: CMyDlgBar ()      {         ...      void CMyDlgBar::DoDataExchange(CDataExchange* pDX)      {         CDialogBar::DoDataExchange(pDX);         ...					
    Клавиша для преобразования является преобразование виртуального Функция-член OnInitDialog() на сообщение WM_INITDIALOG сопоставления метод, изменяя метод OnInitDialog или путем добавления Обработчик ON_MESSAGE(). Вы не имеете переопределение метода OnInitDialog(). Если Нет добавьте перед продолжением.
  3. Удалить «виртуальный OnInitDialog() BOOL»; из заголовка класса и добавить «afx_msg ДЛИННЫЙ OnInitDialog (UINT, LONG);» в том же месте. Например:
          class CMyDlgBar : public CDialogBar      {         ...      // Implementation      protected:         // Generated message map functions         //<AngularNoBind>{{</AngularNoBind>AFX_MSG(CMyDlgBar)         virtual BOOL OnInitDialog();                // <-Remove this line.         //}}AFX_MSG         afx_msg LONG OnInitDialog ( UINT, LONG );   // <-Add this line.         DECLARE_MESSAGE_MAP()      };						
    Теперь в разделе реализации класса выполните соответствующий изменения.
  4. "on_message (wm_initdialog, oninitdialog);" Добавить к схеме сообщений в .Реализация файл CPP. Например:
          BEGIN_MESSAGE_MAP(CMyDlgBar, CDialogBar)         //<AngularNoBind>{{</AngularNoBind>AFX_MSG_MAP(CMyDlgBar)         ...         //<AngularNoBind>}}</AngularNoBind>AFX_MSG_MAP         ON_MESSAGE(WM_INITDIALOG, OnInitDialog )    // <-- Add this line.      END_MESSAGE_MAP()						
    Теперь преобразуйте виртуальный OnInitDialog() для отображения сообщений OnInitDialog().
  5. Сделать преобразование OnInitDialog() следующим образом:
       Change the following:      BOOL CMyDlgBar::OnInitDialog()      {         CDialog::OnInitDialog();   // <-- Replace this line:            ...						
    Чтобы изменить следующим образом:
    LONG CMyDlgBar::OnInitDialog ( UINT wParam, LONG lParam)         {                          // <-- with these lines. -->            BOOL bRet = HandleInitDialog(wParam, lParam);            if (!UpdateData(FALSE))            {               TRACE0("Warning: UpdateData failed during dialog init.\n");            }            ...            return bRet;						
    Класс CDialogBar не содержит виртуальный OnInitDialog() и Поэтому один вызов не будет работать. UpdateData вызывается для подкласса или инициализации любого дочернего элемента управления.
  6. Убедитесь, что стили ресурс диалогового окна поле следующее:
    Стиль: дочерние
    Границу: нет
    Видимые: Неограниченный
    Был на этом этапе все, что смог сделать преобразование из класса CDialog класс CDialogBar работы правильно. Теперь создавать и использовать его.
  7. Добавить экземпляр производного CDialogBar для производного класса CframeWnd класс (обычно называемые CMainFrame). Например:
          class CMainFrame : public CFrameWnd      {          ...          CMyDlgBar m_myDlgBar;          ...      };					
  8. Вызовите метод create для переменной m_myDlgBar в CFrameWnd::OnCreate() метод, аналогичный следующему:
          int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)      {         ...         if (!m_myDlgBar.Create(this, IDD_DLGBAR1, CBRS_LEFT,            IDD_DLGBAR1))         {            TRACE0("Failed to create dialog bar\n");            return -1;      // fail to create         }         ...      }					
  9. Наконец Если требуется поддержка динамического закрепления и изменение размера CDialogBar, добавьте следующие строки в конец CMainFrame::OnCreate():
          int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)      {         ...         m_myDlgBar.SetBarStyle(m_wndToolBar.GetBarStyle() |            CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);         m_myDlgBar.EnableDocking(CBRS_ALIGN_ANY);         DockControlBar(&m_myDlgBar);         return 0;      }
Ссылки
Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
99161Как производные от классов, не перечисленные в ClassWizard