- •Лекция 7 Ресурсы Способы хранения данных программы
- •Общие сведения о файле ресурсов
- •Компиляция ресурсов
- •Значки и курсоры
- •Создание иконок
- •Получение описателя иконок
- •Использование иконок в программе
- •Использование альтернативных курсоров
- •Битовые образы: картинки в пикселях
- •Символьные строки
- •Использование ресурсов-символьных строк
- •Idl, "character string 1" id2, "character string 2" [определения остальных строк] }
- •Ресурсы, определяемые пользователем
Использование иконок в программе
Хотя для обозначения программ 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 использует курсор, ранее заданный в классе окна.