Дополняем наш проект. В нашем проекте необходимо создать ресурс панели инструментов. Перейти на вкладку ResourceView и выбираем меню Insert, появиться диалоговое окно, в нем нам нужно выбрать тип ресурса - ToolBar.
Теперь нужно две кнопки. Делается это так. Сначала выбираете цвет которым будете рисовать в окошке Colors.
Потом инструмент, который хотите рисовать в окне Graphics. Выберите закрашенный прямоугольник.
И теперь нарисуйте на кнопки прямоугольник обратите внимание что сразу проявиться новая пустая кнопка.
Вам нужно две кнопки.
Смотрим файл 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);
}
Вот теперь можно запускать и пробовать.
Создаем класс панели инструментов в классе рамки окна. Как и все элементы, панель инструментов необходимо создать. Для её создания мы выбрали место 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);