ALTE DOCUMENTE
|
||||||||
Создание растрового изображения для пане&# 14114i818o 1083;и инструментов
Прежде чем использовать пане&# 14114i818o 1083;и инструментов, нужно создать иконки, формирующие изображения на кнопках пане&# 14114i818o 1083;и. Для этого понадобится графический редактор. Процесс создания растрового изображения идентичен в целом процессу рисования иконки (Вы делали это, создавая пользовательские иконки к примерам гл. 6). Однако тут есть и одно существенное отличие: с пане&# 14114i818o 1083;ью инструментов может быть связано только одно растровое изображение, и оно должно содержать все изображения для кнопок. Таким образом, если пане&# 14114i818o 1083;ь инструментов должна содержать шесть кнопок, то и растр, связанный с ней, должен содержать шесть изображений. Например, если изображения кнопок имеют размер 16 16 пикселей и пане&# 14114i818o 1083;ь инструментов содержит шесть кнопок, то растр, связанный с этой пане&# 14114i818o 1083;ью, должен иметь высоту 16 и ширину 96 (16
16 пикселей. На рис. 10.1 показано растровое изображение, которое использовано в примерах этой главы в графическом редакторе (четвертое изображение намеренно оставлено пустым). Пане&# 14114i818o 1083;ь инструментов используется как альтернативное меню для работающей с графикой программы из гл. 9. Вы можете создать собственное растровое изображение и сохранить его в файле с именем Toolbar bmp
Рис. 10.1. Пане&# 14114i818o 1083;ь инструментов в процессе графического
редактирования
. Программа работы с пане&# 14114i818o 1083;ью инструментов.
Следующий пример представляет собой программу работы с графикой из гл. 9, в которую добавлена пане&# 14114i818o 1083;ь инструментов, дублирующая команды меню. Используя пане&# 14114i818o 1083;ь инструментов, Вы можете рисовать линии, прямоугольники и эллипсы, а также стереть изображение в окне и выбрать команду Помощь.
// Демонстрация пане&# 14114i818o 1083;и инструментов
include <Windows h>
#include <Commctrl.h>
#include <String.h>
#include <Stdio.h>
#include "Tb.h"
#define NUMBUTTONS 6
void InitToolBar(); // Функция инициализации пане&# 14114i818o 1083;и
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);
char szWinName[] = "МоеОкно"; // Имя класса окна
int maxX, maxY; // Размеры экрана
HDC memdc; // DC виртуального окна
HBITMAP hbit // Растр - это виртуальное окно
HBRUSH hbrush hOldbrush
HPEN hOldpen // Дескриптор прежнего пера
HPEN hRedpen,hGreenpen,hBluepen,hYellowpen; // Перья
TBBUTTON tbButtons[NUMBUTTONS];
HWND tbwnd; // Дескриптор пане&# 14114i818o 1083;и инструментов
int WINAPI WinMain (HINSTANCE hThisInst,
HINSTANCE hPrevInst,
LPSTR lpszArgs,
int nWinMode)
return msg wParam
}
Windows
LRESULT CALLBACK WindowFunc HWND hwnd
UINT message,
WPARAM wParam,
LPARAM lParam)
break;
case WM_PAINT: // Перерисовка окна
// DC */
hdc=BeginPaint(hwnd,&paintstruct);
BitBlt(hdc,0,0,maxX,maxY,memdc,0,0,SRCCOPY);
// Освободить DC
EndPaint(hwnd,&paintstruct);
break
case WM DESTROY // Завершение программы
// Удалить созданные перья
DeleteObject hRedpen
DeleteObject(hGreenpen);
DeleteObject(hBluepen);
DeleteObject(hYellowpen);
DeleteDC(memdc); // Удалить виртуальное окно
PostQuitMessage(0);
break
default
// Все сообщения, не обрабатываемые в данной
// функции, направляются на обработку по
// умолчанию
return DefWindowProc(hwnd,message,
wParam,lParam);
return
}
// Инициализация структур пане&# 14114i818o 1083;и инструментов
void InitToolBar
Для этой программы понадобится следующий файл ресурсов Mydialog.rc:
#include <Windows.h>
#include "Tb.h"
IDTB_BMP BITMAP "Toolbar.bmp"
MYMENU MENU
POPUP "&Разное"
MENUITEM "Помощь", ID_HELP
}
MYMENU ACCELERATORS
Tb h
#define ID_LINES 100
#define ID_RECTANGLES 101
#define ID_ELLIPSES 102
#define ID_SHOW 103
#define ID_HIDE 104
#define ID_RESET 105
#define ID_HELP 106
#define ID_TOOLBAR 200
define IDTB BMP 300
Большая часть этой программы Вам уже знакома. Приведем короткое описание остальной ее части. Вся информация, относящаяся к пане&# 14114i818o 1083;и инструментов, хранится в массиве tbButtons InitToolBar ID HIDE WinMain InitCommonControls . После этого создается пане&# 14114i818o 1083;ь инструментов и ее дескриптор сохраняется в переменной tbwnd
Каждая кнопка пане&# 14114i818o 1083;и инструментов соответствует определенной команде меню. Поэтому при нажатии такой кнопки соответствующая команда будет передана программе в параметрах сообщения WM COMMAND case
Поскольку пане&# 14114i818o 1083;ь инструментов является окном, она может быть скрыта или отображена, как и любое другое окно, при помощи функции ShowWindow . Пане&# 14114i818o 1083;ь инструментов может быть спрятана по команде Спрятать Toolbar Toolbar. Поскольку пане&# 14114i818o 1083;ь инструментов уменьшает размер рабочей области окна, всегда следует предоставлять пользователю возможность убирать ее с экрана. Как видно из программы, делается это достаточно просто.
ID HELP. При выборе команды Помощь (в меню или нажатием соответствующей кнопки пане&# 14114i818o 1083;и инструментов) кнопка помощи в пане&# 14114i818o 1083;и инструментов нажимается вручную при помощи посылки сообщения TB CHECKBUTTON. Когда же пользователь закрывает окно сообщения со справочной информацией, кнопка вручную освобождается. Таким образом, кнопка помощи остается нажатой все время, пока окно сообщения находится на экране. Это пример того, как из программы можно управлять пане&# 14114i818o 1083;ью инструментов. Пример окна, создаваемого этой программой, показан на рис. 10.2.
Рис. 10.2. Окно диалога с пане&# 14114i818o 1083;ью инструментов
|