Глава 6. Графические образы, иконки и курсоры




В этой главе объясняется, как можно задать вид двух важных элементов, связанных со всеми приложениями Windows: иконки приложения и курсора мыши. В этой главе также показано, как выводить на экран растровые графические изображения.

Иконки, курсоры и растровые изображения являются ресурсами, содержащими графическую информацию. Эти ресурсы создаются с помощью специального графи­ческого редактора (чаще всего такой редактор поставляется вместе с компилятором, который может строить программы для Windows). Когда иконка, курсор или растровое изображение созданы в редакторе, соответствующий ресурс должен быть определен в файле ресурсов, связанном с Вашей программой. Наконец, перед использованием этих ресурсов они должны быть загружены программой. Ниже подробно рассматривается, как это сделать.

 


6.1. Иконка и курсор

 

Рис. 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 (возможно, иконка, созданная Вами, будет выглядеть лучше). Пользовательский курсор будет виден при перемеще­нии мыши внутри главного окна; убедитесь в этом, прежде чем продолжить чтение.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-03-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: