Шаг 167 - Стиль окна Exploler и панели инструментов

В шаге 164 мы с Вами уже создавали стиль Exploler, вот теперь давайте к этому проекту добавим свои панели инструментов и посмотрим как их активность будет зависеть от фокуса вида. Напоминаю, что стиль Exploler разбивает окно на два вида.

CLeftView - это левый вид и порожден этот вид от класса CTreeView.

....View - это правый вид и он порожден в зависимости от выбранного Вами вида при генерации приложения.

Итак, создаем в ресурсах две новых панели инструментов. Обязательно на них надо нарисовать кнопки. Если просто создать панели и не добавить кнопки, то при компиляции они пропадут.

167_1.gif (3913 b)

После добавления панели инструментов надо создать. Для этого в классе 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.

Теперь приложение можно запустить. И вот тут-то и можно посмотреть на что я хочу обратить внимание. То есть На панели инструментов кнопки будут активны, если активен тот вид, в котором производится обработка. Давайте убедимся. Запустите приложение и щелкните на правом виде.

167_2.gif (7530 b)

А потом на левом. В зависимости от выбраного вида будут активизироваться панели инструментов. Вот и вся идея.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 16.04.2000