В шаге 164 мы с Вами уже создавали стиль Exploler, вот теперь давайте к этому проекту добавим свои панели инструментов и посмотрим как их активность будет зависеть от фокуса вида. Напоминаю, что стиль Exploler разбивает окно на два вида.
CLeftView - это левый вид и порожден этот вид от класса CTreeView.
....View - это правый вид и он порожден в зависимости от выбранного Вами вида при генерации приложения.
Итак, создаем в ресурсах две новых панели инструментов. Обязательно на них надо нарисовать кнопки. Если просто создать панели и не добавить кнопки, то при компиляции они пропадут.
После добавления панели инструментов надо создать. Для этого в классе CMainFrame необходимо объявить дополнительные переменные для каждой панели.
class CMainFrame : public CMDIFrameWnd { ........ protected: // control bar embedded members CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; CToolBar m_wndToolBarView; CToolBar m_wndToolBarTree; ...... };
Ну и сам код в OnCreate():
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::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_wndToolBarTree.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBarTree.LoadToolBar(IDR_TOOLBARTREE)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } if (!m_wndToolBarView.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBarView.LoadToolBar(IDR_TOOLBARVIEW)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } ........ }
Ну и теперь самое главное. Для каждой кнопки нужно указать в каком виде будет производиться обработка события её нажатия. Сделать это можно используя ClassWizard. Свяжите кнопки для панели IDR_TOOLBARTREE c функциями класса CLeftView, у нас их четыре. А кнопки панели IDR_TOOLBARVIEW с Вашим классом вида у меня он называеться CTextWorkStudioView.
Теперь приложение можно запустить. И вот тут-то и можно посмотреть на что я хочу обратить внимание. То есть На панели инструментов кнопки будут активны, если активен тот вид, в котором производится обработка. Давайте убедимся. Запустите приложение и щелкните на правом виде.
А потом на левом. В зависимости от выбраного вида будут активизироваться панели инструментов. Вот и вся идея.