Шаг 18 - Панель инструментов

Создание проекта

Дополняем наш проект. В нашем проекте необходимо создать ресурс панели инструментов. Перейти на вкладку ResourceView и выбираем меню Insert, появиться диалоговое окно, в нем нам нужно выбрать тип ресурса - ToolBar.

18_1.gif (3581 b)

Теперь нужно две кнопки. Делается это так. Сначала выбираете цвет которым будете рисовать в окошке Colors.

18_2.gif (1502 b)

Потом инструмент, который хотите рисовать в окне Graphics. Выберите закрашенный прямоугольник.

18_3.gif (2575 b)

И теперь нарисуйте на кнопки прямоугольник обратите внимание что сразу проявиться новая пустая кнопка.

18_4.gif (3063 b)

Вам нужно две кнопки.

18_5.gif (1093 b)

Смотрим файл resource.h там появились идентификаторы наших элементов.

// Used by step18.rc
//

#define IDS_STRING1 1
#define IDS_STRING2 2
#define IDR_MENU 101
#define IDR_MENU_RUS 102
#define IDD_DIALOG1 103
#define IDD_DIALOG2 104
#define IDR_TOOLBAR1 105
#define ID_FILE_EXIT 40001
#define ID_FILE_SWITCH 40002
#define ID_OPEN 40003
#define ID_BUTTON40004 40004
#define ID_BUTTON40005 40005

Создаем код

Добавляем в класс рамки окна класс панели инструментов.

class CMainWnd : public CFrameWnd
{
public:
.................
CMenu m_wndMenu; // Это наш класс Меню
CToolBar my_ToolBar; // Это наш класс панели инструментов
CMyClip clip; // Это класс буфера обмена
............
};

В функции OnCreate CMainWnd код для создания панели инструментов.

int CMainWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
........
my_ToolBar.Create(this); // создать панель интструментов
my_ToolBar.LoadToolBar(IDR_TOOLBAR1); // взять ее из ресурсов
my_ToolBar.SetBarStyle(my_ToolBar.GetBarStyle() | CBRS_SIZE_DYNAMIC); // настроить стили
my_ToolBar.EnableDocking(CBRS_ALIGN_ANY); // можно ли панели швартовка
EnableDocking(CBRS_ALIGN_ANY); // функции окна для управления панелью
DockControlBar(&my_ToolBar);
return 0;
}

Перенесем элементы управления ниже .

CMainWnd::CMainWnd()
{
blMenu=FALSE; // инициализация TRUE соответствует IDR_MENU
Create(NULL,"Step18",WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL); // Создать окно программы
// оператор new по умолчанию в случае ошибки вернет NULL
// проверка указателя на NULL дает возможность избавиться от дальнейших ошибок
MyStatic = new CStatic();
if (MyStatic!=NULL) MyStatic->Create("MyStatic",WS_CHILD|WS_VISIBLE|SS_CENTER,
CRect(10,50,100,100),this); // создали
MyButton = new CMyButton(); // Меняем класс на основе которого создается объект

if (MyButton!=NULL) MyButton->Create("MyButton",WS_CHILD|WS_VISIBLE|SS_CENTER,
CRect(120,50,220,100),this,IDC_MYBUTTON);
MyEdit = new CEdit();
if (MyEdit!=NULL) MyEdit->Create(WS_CHILD|WS_VISIBLE|WS_BORDER,
CRect(240,50,340,100),this,IDC_MYEDIT);
}

Вот теперь можно запускать и пробовать.

18_6.gif (9431 b)

Описание

Создаем класс панели инструментов в классе рамки окна. Как и все элементы, панель инструментов необходимо создать. Для её создания мы выбрали место OnCreate, на мой взгляд это не самое плохое место. При создании требуется указать окно владельца. Естественно в нашем случае рамка окна, this сам за себя говорит. Далее мы читаем панель из ресурсов. Это так знакомо !

  //для меню
m_wndMenu.LoadMenu(IDR_MENU);
SetMenu(&m_wndMenu);
// для диалоговой панели
CDialog about(IDD_DIALOG1);
about.DoModal();

SetBarStyle Мы унаследовали от папы CControlBar, к текущим стилям добавляем динамический размер. Следующей командой разрешаем её причаливание. CBRS_ALIGN_ANY - причаливать в любое место, а могли и не давать такой свободы. И необходимо разрешить "причалу" принимать панель. И в конце силовое причаливание, для начала. Запускайте, после всех необходимых процедур. Потаскайте панель, причальте туда, сюда. Работает !!! Как у Всех !!! Естественно необходимо проверять, создалась панель или нет, пpочиталась или нет. Не Забывайте.

Шпаргалка

Обьявить класс панели.

class CMainWnd : public CFrameWnd
{
public:
.................
CToolBar my_ToolBar; // Это наш класс панели инструментов
.................
};

Создать и прочитать из ресурсов.

 my_ToolBar.Create(this);						    // создать панель интструментов
my_ToolBar.LoadToolBar(IDR_TOOLBAR1); // взять ее из ресурсов

Стиль и тип причала.

  my_ToolBar.SetBarStyle(my_ToolBar.GetBarStyle()  | CBRS_SIZE_DYNAMIC);    // настроить стили
my_ToolBar.EnableDocking(CBRS_ALIGN_ANY); // можно ли панели швартовка

Для рамки окна разрешить принимать суда и панель завести в порт.

  EnableDocking(CBRS_ALIGN_ANY);					    // функции окна для управления панелью
DockControlBar(&my_ToolBar);

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