Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
System programming / Конспект лекций / Лекция 7 Ресурсы часть1.doc
Скачиваний:
48
Добавлен:
08.05.2015
Размер:
79.87 Кб
Скачать

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

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

wndclass.hlcon = Loadlcon(hinstance, "Myicon");

wndclass.hIconSm = Loadlcon(hinstance, "MySmIcon");

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

anothericon ICON iconfi.l2.ico

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

SetClassLong ( hwnd, GCL_HICON, Loadlcon(hinstance, "anothericon") );

Маленькую иконку можно заменить с помощью GCL_HICONSM.

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

DrawIcon (hdc, x, у, hicon);

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

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

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

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

Описание ресурсов: mycursor CURSOR cursflle.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 использует курсор, ранее заданный в классе окна.