Визуальное программирование и MFC

       

Пример создания панели управления


Обычно создание панели управления и разрешение перемещения панели управления производят при обработке сообщения WM_CREATE для главного окна приложения, например:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { // вызов метода базового класса для корректного создания окна if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;

// разрешить присоединение панелей ко всем сторонам окна EnableDocking(CBRS_ALIGN_ANY);

// создание панели управления if (!m_wndToolBar.Create(this) !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) return -1;

// установить характеристики панели управления m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

// разрешить присоединить панель к любой строке родительского окна m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

// присоединить панель управления к родительскому окну DockControlBar(&m_wndToolBar); // создание панели состояния (процесс создания рассматривается ниже) ……… return 0; }

Сообщения от панели управления (от ее кнопок) приходят окну приложения - родительскому окну, в котором размещена эта панель. Поэтому следует добавить в таблицу класса окна соответствующие макрокоманды для получения сообщений от кнопок и включить в класс окна методы для обработки этих сообщений.

Обычно для создания панели управления вызывается метод Create класса CToolBar во время создания окна приложения. В принципе, панель управления можно создать и позже, когда окно уже отображено на экране. Однако, нужно отметить, что в этом случае панель управления возникает не сразу - чтобы панель появилась, необходимо еще изменить размер окна. Оказывается , метод Create класса CToolBar устанавливает нулевой размер окна панели управления. Настоящий размер панели выбирается позже, в зависимости от ее характеристик, а также размеров и характеристик родительского окна.

Чтобы установить правильные размеры и расположение панели управления, следует вызвать метод RecalcLayout. Он входит в класс CFrameWnd и вызывается автоматически, если используются методы CFrameWnd::ShowControlBar, CFrameWnd::FloatControlBar, CMDIChildWnd::Create, а также некоторые другие.



Содержание раздела