Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 семестр, WinAPI, MFC.pdf
Скачиваний:
388
Добавлен:
15.06.2014
Размер:
6.17 Mб
Скачать

Контрольные вопросы

1.Что такое объект ядра? Чему он принадлежит?

2.Чем можно защищать объект ядра?

3.Что создает система при инициализации процесса?

4.Какие функции создают объекты ядра? Что они возвращают?

5.Объясните принцип работы функции CloseHandle.

6.В каком случае применимо наследование описателей объектов? Какие операции при этом должен выполнять родительский процесс? Что нужно для создания наследуемого описателя?

7.Какой еще способ, позволяет нескольким процессам совместно использовать одни и те же объекты ядра? Для чего эти объекты применяются?

8.Расскажите про функцию DuplicateHandle? В чем заключается ее принцип?

9.Какой функцией модифицируется флаг наследования? Для чего это нужно?

10.Каким образом поток синхронизирует себя с другим?

11.Что такое критическая секция? Как она создается? Где применяется?

12.Что такое мьютекс? Чем он отличается от других объектов?

13.Что такое семафор? Назовите основные функции работы с ним?

14.Что такое событие? Основные функции работы с ним?

15.Что такое ожидаемый таймер? Основные функции работы с ним?

Ресурсы Windows приложения

Файлы ресурсов приложения

Файлы ресурсов представляют собой одну из самых характерных особенностей программирования в Windows.

Использование: С помощью файлов ресурсов большинство приложений определяют визуальные элементы своего пользовательского интерфейса: меню, диалоговые окна, надписи, растровые изображения и другие типы ресурсов

Создание: Файлы ресурсов (rc-файлы) создаются в виде текстового файла (этот файл можно создать как текстовым редактором, так и специальным редактором ресурсов) и компилируются компилятором ресурсов.

Полученный в результате двоичный файл (res-файл):

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

могут сводиться в отдельную библиотеку DLL. Преимущество этого подхода заключается в том, что при изменении файла ресурсов не требуется перекомпилировать все приложение, а нужно только заменить DLL.

На финальном этапе сборки загрузочного модуля компилятор ресурсов вызывается еще раз для записи ресурсов в загрузочный модуль. Также он формирует специальную таблицу ресурсов, расположенную в заголовке exe-файла. Таблица используется Windows для поиска и загрузки ресурсов в оперативную память. Ресурсы являются данными, и они

хранятся в exe-файле программы, но расположены они не в области данных, где обычно хранятся данные исполняемых программ.

Компоненты файла ресурсов

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

Оператор может состоять

из одной строки – однострочный, определяющий растровые изображения

(BITMAP), курсоры (CURSOR), шрифты (FONT), пиктограммы (ICON), язык ресурсов (LANGUGE).

состоит из следующих частей:

Идентификатор Тип_ресурса [Характеристика_загрузки] Имя_файла_ресурса

из многих строк - многострочный, определяющие диалоговые окна (DIALOG), таблицы строк (STRINGTABLE), таблицы акселераторов (ACCELERATORS), меню (MENU), пользовательские данные (RCDATA) и ресурсы информации о версии.

состоит из следующих частей:

Идентификатор ОПЕРАТОР [Необязательные_параметры] [Необязательные_инструкции]

BEGIN [Инструкции] END

Рисунок 1

Значки (пиктограммы)

Значок (icon) - это графическое изображение небольшого размера, состоящее из отдельных пикселов (32x32).

Использование: для обозначения свернутого окна приложения, они отображаются в левом верхнем углу заголовка окна (размером 16х16, из “большого” изображения исключается каждый второй столбец и строка).

Создание: с помощью редактора изображений можно нарисовать значки и использовать их в приложениях. Хранятся в файлах с расширением имени *.ico

Включение в файл описания ресурсов: оператор ICON MyIcon ICON iconfile.ico

Получение дескриптора: используется функция LoadIcon.

Способы загрузки значков, определенных в ресурсах приложения:

связь между именем пиктограммы в описании ресурсов и в вызове функции

LoadIcon:

Описание ресурсов: MyIcon ICON iconfile.ico

Текст программы: HICON hIcon=LoadIcon(hInst,”MyIcon”);

вместо имени можно также использовать число– это идентификатор значка:

Описание ресурсов: 125 ICON iconfile.ico

Текст программы: HICON hIcon=LoadIcon(hInst,

MAKEINTRESOURCE(125));

использование предопределённых значков:

Заголовочный файл: #define IDI_APPLICATION MAKEINTRESOURCE (32512)

Текст программы: HICON hIcon=LoadIcon(NULL, IDI_APPLICATION);

комбинация метода, использующего текстовую строку, и метода, использующего число

Описание ресурсов: 125 ICON iconfile.ico

Текст программы: HICON hIcon=LoadIcon(hInst,”#125”);

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

Заголовочный файл: #define MyIcon 125

Описание ресурсов: MyIcon ICON iconfile.ico Текст программы: HICON hIcon=LoadIcon(hInst,

MAKEINTRESOURCE(MyIcon));

!Использование идентификаторов вместо имен значков уменьшает размер exe-файла, и вероятно, немного ускоряет работу функции LoadIcon.

Дескриптор, выдаваемый функцией LoadIcon, можно присвоить полю значка структуры класса при регистрации класса окна hWnd, тогда окно hWnd будет иметь именно этот значок:

wndclass.hIcon=LoadIcon(hInst,”MyIcon”);

Замена действующего значка значком "myicon": SetClassLong(hWnd,GCL_HICON,LoadIcon(hInst,”AnotherIcon”));

После того, как вы приложение загрузило значок, его можно также нарисовать в любом месте экрана функцией DrawIcon.

DrawIcon (hdc, x, y, hIcon);

Удаление значка: функцию DestroyIcon.

Курсоры

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

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

Создание: с помощью редактора изображений можно нарисовать значки и использовать их в приложениях. Хранятся в файлах с расширением имени *.cur

Включение в файл описания ресурсов: оператор CURSOR MyCursor CURSOR cursfile.cur

Получение дескриптора: используется функция LoadCursor.

Способы загрузки курсоров, определенных в ресурсах приложения:

аналогично, как и для значков:

Описание ресурсов: MyCursor CURSOR cursfile.cur

Текст программы: HCURSOR hCursor=LoadCursor(hInst,”MyCursor”);

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

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

wndclass.hCursor= LoadCursor(hInst,"MyCursor”);

Заменена действующего курсора другим курсором: SetClassLong(hWnd,GCL_HCURSOR,LoadCursor(hInst,”AnotherCursor”));

!Для динамического изменения формы курсора следует использовать функцию SetCursor, используя в качестве параметра дескриптор нового курсора, подготовленный при помощи функции LoadCursor.

Выключение\включение изображение курсора - используются функция ShowCursor.

Операционная оболочка Windows содержит несколько встроенных курсоров. Их идентификаторы описаны в файле windows.h и начинаются с префикса IDC_.

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

LoadCursor(NULL,IDC_ARROW);

Удаление курсора: при помощи функции DestroyCursor.