Шаг 95 - Добавление своей панели инструментов

В этом шаге мы создадим свою панель инструментов и поместим туда нашу кнопку. Это полезно, если вы хотите вынести на панель специфические действия Вашей программы, которые на стандартной панели как то не к месту.

Создаем приложение TestMyTools, как SDI и после выбора SDI сразу Finish. Нормально и быстро. Переходим в ResourceView там нам нужен Toolbar. Щелкаем правой кнопкой мыши и выбираем пункт Insert Toolbar.

step95_1.gif (1912 b)

Дальше как в тот раз рисуем круг и присваиваем идентификатор 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)); 
}
Мы с Вами получили настоящую диалоговую панель. Эту панель можно таскать и прислонять к стенкам. Все можно кроме как убирать с экрана. :-))))

step95_2.gif (2579 b)


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.