Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Глава 6. Графические образы, иконки и курсоры
В этой главе объясняется, как можно задать вид двух важных элементов, связанных со всеми приложениями Windows: иконки приложения и курсора мыши. В этой главе также показано, как выводить на экран растровые графические изображения. Иконки, курсоры и растровые изображения являются ресурсами, содержащими графическую информацию. Эти ресурсы создаются с помощью специального графического редактора (чаще всего такой редактор поставляется вместе с компилятором, который может строить программы для Windows). Когда иконка, курсор или растровое изображение созданы в редакторе, соответствующий ресурс должен быть определен в файле ресурсов, связанном с Вашей программой. Наконец, перед использованием этих ресурсов они должны быть загружены программой. Ниже подробно рассматривается, как это сделать.
Рис. 6.1. Создание иконки Win-приложения в среде Visual C++ Уже отмечалась, что для создания иконки или курсора мыши требуется графический редактор. На рис. 6.1 представлена иконка, создаваемая в среде программирования Visual C++ (оболочка Visual Studio или Developer Studio). Чтобы создать новую иконку, нужно в Visual Studio, через главное меню сделать следующее: File→ New→ Files→ Icon File.
Соответственно, для создания нового курсора необходимо выполнить: File→ New→ Files→ Cursor File. С помощью графического редактора можно увеличивать изображение иконки или курсора мыши, что позволяет легко создавать или редактировать изображение на экране. Перед использованием в программе и иконку, и курсор необходимо нарисовать. Каждое изображение, созданное при помощи графического редактора, поставляемого с компилятором, должно быть сохранено в отдельном файле. Когда Вы определите изображения иконки и курсора, понадобится добавить в файл ресурсов операторы ICON и CURSOR. Эти операторы имеют следующий вид:
< ИмяИконки> ICON < имя_файла> < ИмяКурсора> CURSOR < имя_файла>
Здесь ИмяИконки и ИмяКурсора – имена, идентифицирующие иконку и курсор. Они будут использоваться в программе для обращения к этим ресурсам. Имя_файла задает файл с изображением иконки или курсора. В примерах этой главы пользовательская иконка имеет имя MYICON, а курсор – имя MYCURSOR. Их изображения будут сохраняться в файлах Newicon.ico (иконка) и Newcursor.cur (курсор). Для этого в файл ресурсов необходимо добавить следующие строки: MYCURSOR CURSOR Newcursor.cur MYICON ICON Newicon.ico
Изменение иконки и курсора. Как Вы знаете, все приложения Windows прежде всего создают класс окна, определяющий многие атрибуты окна, включая вид иконки приложения и форму курсора мыши. Дескрипторы иконки и курсора записываются в поля hIcon и hCursor структуры WNDCLASS. До сих пор мы использовали только одну из встроенных иконок и курсор, определенные в системе. Чтобы использовать собственные иконку и курсор, Вам необходимо загрузить их перед регистрацией класса окна с помощью функций API LoadIcon() и LoadCursor(), о которых шла речь в гл. 2. Следующий фрагмент программы загружает иконку с именем MYICON, курсор с именем MYCURSOR и запоминает их дескрипторы в соответствующих полях переменной wcl типа WNDCLASS:
wcl.hIcon =Loadlcon (hThisInst, " MYICON"); // Иконка wcl.hCursor=LoadCursor(hThisInst, " MYCURSOR"); // Курсор
Здесь hThisInst является дескриптором именно этой программы. В предыдущих программах книги эти функции применялись для загрузки стандартных иконки и курсора. В данном случае они используются для загрузки иконки и курсора, созданных Вами.
Пример 6-1. Приведенная ниже программа иллюстрирует работу с пользовательскими иконками и курсором. Иконка отображается на месте кнопки системного меню главного окна программы и на панели Списка Задач. Пользовательский курсор используется, когда указатель мыши устанавливается внутри главного окна, то есть стандартный курсор мыши автоматически изменяется на пользовательский при его попадании в область главного окна программы. При перемещении курсора мыши за пределы главного окна программы курсор принимает исходный вид. Перед компиляцией этой программы не забудьте создать собственные иконку и курсор, используя графический редактор, и затем поместить их описание в файл ресурсов программы.
// Демонстрация пользовательской иконки и курсора мыши #include < Windows.h> LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM); char szWinName[]=" МоеОкно"; // Имя класса окна
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode) { HWND hwnd; MSG msg; WNDCLASS wcl; // Определить класс окна wcl.hInstance=hThisInst; // Дескриптор приложения wcl.lpszClassName=szWinName; // Имя класса окна wcl.lpfnWndProc=WindowFunc; // Функция окна wcl.style=0; // Стиль по умолчанию wcl.hIcon=LoadIcon(hThisInst, " MYICON"); // Иконка wcl.hCursor=LoadCursor(hThisInst, " MYCURSOR"); //Курс. wcl.lpszMenuName=NULL; // Без меню wcl.cbClsExtra=0; // Без дополнительной информации wcl.cbWndExtra=0; wcl.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH); //Белый фон if(! RegisterClass(& wcl)) // Регистрируем класс окна return 0; hwnd=CreateWindow(szWinName, // Создать окно " Каркас программы для Windows", WS_OVERLAPPEDWINDOW, // Стиль окна CW_USEDEFAULT, // x-координата CW_USEDEFAULT, // y-координата CW_USEDEFAULT, // Ширина CW_USEDEFAULT, // Высота HWND_DESKTOP, // Нет родител. окна NULL, // Нет меню hThisInst, // Дескриптор приложения NULL); // Нет дополнит. аргументов ShowWindow (hwnd, nWinMode); // Показать окно UpdateWindow (hwnd); // и перерисовать
while(GetMessage(& msg, NULL, 0, 0)) // Запустить цикл { // обработки сообщений TranslateMessage(& msg); // Разреш. исп. клавиатуры DispatchMessage (& msg); // Вернуть управл. Windows } return msg.wParam; } // Следующая функция вызывается операционной // системой Windows и получает в качестве // параметров сообщения из очереди сообщений // данного приложения LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_DESTROY: // Завершение программы PostQuitMessage (0); break; default: // Все сообщения, не обрабатываемые в // данной функции, направляются на обработку // по умолчанию return DefWindowProc(hwnd, message, wParam, lParam); } return 0;
} Рис. 6.2. Окно с пользовательской иконкой и курсором
Пользовательская иконка показана на рис. 6.2 (возможно, иконка, созданная Вами, будет выглядеть лучше). Пользовательский курсор будет виден при перемещении мыши внутри главного окна; убедитесь в этом, прежде чем продолжить чтение.
|