В этом шаге мы создадим свою панель инструментов и поместим туда нашу кнопку. Это полезно, если вы хотите вынести на панель специфические действия Вашей программы, которые на стандартной панели как то не к месту.
Создаем приложение TestMyTools, как SDI и после выбора SDI сразу Finish. Нормально и быстро. Переходим в ResourceView там нам нужен Toolbar. Щелкаем правой кнопкой мыши и выбираем пункт Insert Toolbar.
Дальше как в тот раз рисуем круг и присваиваем идентификатор IDC_CURCLE. Панель есть теперь надо её вывести на экран.
Создаются панели инструментов в функции OnCreate класса CMainFrame. Только перед этим нам необходимо завести класс панели интсрументов. Один у нас есть он был сгенерирован App Wizard, а второй мы добавим.
class CMainFrame : public CFrameWnd { ..... CToolBar m_wndToolBar; // было CToolBar m_wndToolBar1; // добавили .... };Теперь нам нужно повторить инииализацию в OnCreate только использовать идентификатор нашей панели и наш класс. Жирным дополнения
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } if (!m_wndToolBar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar1.LoadToolBar(IDR_TOOLBAR1)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } // TODO: Delete these three lines if you don't want the toolbar to // be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); DockControlBar(&m_wndToolBar1); return 0; }И как в прошлом примере реакцию на нажатие на диалоговой панели.
///////////////////////////////////////////////////////////////////////////// // CTestMyToolsView message handlers void CTestMyToolsView::OnCurcle() { CDC* pDC; pDC=GetDC(); pDC->Ellipse(CRect(10,10,100,100)); }Мы с Вами получили настоящую диалоговую панель. Эту панель можно таскать и прислонять к стенкам. Все можно кроме как убирать с экрана. :-))))