Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ch-09.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
258.05 Кб
Скачать

Использование значков в вашей программе

Хотя для обозначения программ Windows использует значки несколькими способами, во множестве программ для Windows значок задается только при определении класса окна:

wndclass.hIcon = LoadIcon(hInstance, "MyIcon");

.

.

.

wndclass.hIconSm = LoadIcon(hInstance, "MySmIcon");

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

anothericon ICON iconfil2.ico

С помощью следующей инструкции вы можете заменить этот значок значком "myicon":

SetClassLong ( hwnd, GCL_HICON, LoadIcon(hInstance, "anothericon") );

Маленький значок можно заменить с помощью GCL_HICONSM. Если вы сохранили описатель значка, возвращенный функцией LoadIcon, то вы также можете и нарисовать значок в рабочей области вашего окна:

DrawIcon (hdc, x, y, hIcon);

Сама Windows использует функцию DrawIcon при выводе значка вашей программы в соответствующее место. Windows получает описатель значка из структуры класса окна. Вы можете получить описатель тем же способом:

DrawIcon (hdc, x, y, GetClassLong(hwnd, GCL_HICON));

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

resourc1 ICON resourc1.ico

Поскольку символьная строка "Resourc1" хранится в массиве szAppName и уже используется программой в качестве имени класса окна, функция LoadIcon вызывается просто:

LoadIcon (hInstance, szAppName);

Можно заметить, что функция LoadIcon для одного и того же значка вызывается трижды, дважды при определении класса окна в WinMain и еще раз при получении описателя значка во время обработки сообщения WM_CREATE в WndProc. Троекратный вызов функции LoadIcon не создает проблем, поскольку возвращаемым значением функции является один и тот же описатель. Фактически, Windows только однажды загружает значок из файла с расширением .EXE.

Использование альтернативных курсоров

Инструкции для задания курсора в файле описания ресурсов и для получения описателя курсора в вашей программе очень похожи на показанные ранее инструкции для значков:

Описание ресурсов:

mycursor CURSOR cursfile.cur

Исходный текст программы:

hCursor = LoadCursor (hInstance, "mycursor");

Другие способы, показанные для значков (использование идентификаторов и MAKEINTRESOURCE), также работают и для курсоров. В заголовочные файлы Windows включается определение typedef HCURSOR, которое вы можете использовать для хранения описателя курсора.

Вы можете использовать описатель курсора, полученный при вызове функции LoadCursor, при задании поля hCursor структуры класса окна:

wndclass.hCursor = LoadCursor (hInstance, "mycursor");

Это заставляет курсор мыши, если он оказывается в рабочей области вашего окна, превращаться в ваш пользовательский курсор.

Если вы используете дочерние окна, можно сделать так, чтобы курсор выглядел по-разному в разных окнах. Если в вашей программе определяются классы этих дочерних окон, то для каждого класса вы можете использовать свой курсор путем соответствующей установки поля hCursor в каждом классе окна. А если вы используете предопределенные дочерние элементы управления, то изменить поле hCursor класса окна можно с помощью функции:

SetClassLong(hwndChild, GCL_HCURSOR,

LoadCursor(hInstance, "childcursor"));

Если вы разделяете рабочую область окна вашей программы на маленькие логические области без использования дочерних окон, то для изменения курсора мыши вы можете использовать функцию SetCursor :

SetCursor (hCursor);

Функцию SetCursor следует вызывать при обработке сообщения WM_MOUSEMOVE. В противном случае для перерисовки курсора при его движении Windows использует курсор, ранее заданный в классе окна.

В программе RESOURC1 для задания имени курсора используется имя программы:

resourc1 CURSOR resourc1.cur

Когда в исходном тексте программы RESOURC1.С задается класс окна, переменная szAppName используется следующим образом в функции LoadCursor :

wndclass.hCursor = LoadCursor (hInstance, szAppName);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]