Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:OC Windows & OC Linux. Лабораторные работы по курсу «Операционные системы»
.pdf
Функция lstrcmp сравнивает строки, заданные параметрами:
int WINAPI lstrcmp(LPCSTR IpszString1, LPCSTR lpszString2);
Для копирования текстовых строк вы должны пользоваться
функцией lstrcpy:
LPSTR WINAPI lstrcpy(LPSTR lpszString1, LPCSTR lpszString2);
Длину текстовой строки (без учета закрывающего строку двоичного нуля) можно получить при помощи функции lstrlen, аналогичной известной вам функции strlen:
int WINAPI lstrlen(LPCSTR lpszString);
Функция IsCharAlpha возвращает значение TRUE, если символ,
заданный параметром chTest, является буквой:
BOOL WINAPI IsCharAlpha(char chTest);
Функция IsCharAlphaNumeric возвращает значение TRUE, если
символ, заданный параметром chTest,
BOOL WINAPI IsCharAlphaNumeric(char chTest);
Функция IsCharUpper возвращает значение TRUE, если символ,
заданный параметром chTest, является прописным (заглавным):
BOOL WINAPI IsCharUpper (char chTest);
Функция IsCharLower возвращает значение TRUE, если символ,
заданный параметром chTest, является строчным:
BOOL WINAPI IsCharLower(char chTest);
1.3. Пиктограмма
В загрузочный модуль приложения Windows можно добавить
ресурс, который называется пиктограммой (Icon).
является буквой или цифрой:
21

Пиктограмма – это графическое изображение небольшого
размера, состоящее из отдельных пикселов. Пиктограммы обычно
используются для обозначения свернутого окна приложения. Окна
групп приложения Program Manager содержат пиктограммы других
приложений. Приложения Windows активно работают с графическими изображениями, состоящими из отдельных пикселов и
имеющих прямоугольную или квадратную форму. Такие изображения называются bitmap (битовый образ). Для представления цвета
отдельного пиксела в изображении может быть использовано различное количество бит памяти. Например, цвет пиксела чернобелого изображения может быть представлен одним битом, для
представления цвета 16-цветного изображения нужно 4 бита. Цвет
одного пиксела изображения в режиме TrueColor представляется
24 битами памяти.
Можно считать, что пиктограмма является упрощенным вариантом изображения bitmap. Пиктограммы хранятся
ширением имени *.ico (хотя можно использовать любое расширение). В одном файле обычно находится несколько вариантов пиктограмм. Когда Windows рисует пиктограмму, он выбирает из файла
наиболее подходящий для текущего режима работы видеоадаптера.
1.3.1. Включение пиктограммы в файл описания ресурсов
Для включения пиктограммы в файл описания ресурсов используется оператор ICON (для включения пиктограмм в диалоговые
панели используется другой формат, который мы сейчас не будем
рассматривать):
IconID ICON [параметры загрузки] [тип памяти] имя файла
Параметры загрузки и тип памяти указывается так же, как и для
описанной нами ранее таблицы строк STRINGTABLE. В качестве
имени файла необходимо указать имя файла, содержащего пиктограмму,
волическое имя (см. предыдущую строку) или как целое число –
идентификатор ресурса:
полняемый файл приложения Windows.
например:
AppIcon ICON myicon.ico
Идентификатор пиктограммы IconID можно указывать как сим-
456 ICON great.ico
После сборки проекта файл пиктограммы будет вставлен в ис-
22
в файлах с рас-

1.3.2. Использование пиктограммы при регистрации класса окна
Во всех приложениях для класса главного окна приложения мы
определяли встроенную в Windows пиктограмму с идентификатором
IDI_APPLICATION. Для этого мы вызывали функцию LoadIcon:
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
Эта функция имеет следующий прототип:
HICON WINAPI LoadIcon(HINSTANCE hInst, LPCSTR lpszIcon);
Параметр hInst является идентификатором текущей копии приложения.
Параметр lpszIcon – идентификатор ресурса или дальний указатель на строку, идентифицирующую ресурс
Функция LoadIcon возвращает идентификатор загруженной
пиктограммы или NULL при ошибке.
Если в файле описания ресурсов идентификатор пиктограммы
представлен в виде текстовой строки, в качестве второго параметра
функции LoadIcon следует передать указатель на эту строку.
Следующая строка задает для класса главного окна приложения
пиктограмму, определенную в файле описания ресурсов под именем
AppIcon:
wc.hIcon = LoadIcon(hInstance, "AppIcon");
Если же
число, второй параметр следует определить с использованием макрокоманды MAKEINTRESOURCE, определенной в файле win-
dows.h:
#define MAKELP(sel, off) ((void FAR*)MAKELONG((off),
(sel)) )
#define MAKEINTRESOURCE(i) ((LPCSTR)MAKELP(0, (i)))
1.3.3. Изображение пиктограммы в окне приложения
После того как вы загрузили пиктограмму функцией LoadIcon,
вы можете нарисовать ее в любом месте окна. Для этого вам достаточно вызвать функцию DrawIcon:
BOOL WINAPI DrawIcon(HDC hDC, int x, int y, HICON hIcon);
для идентификатора пиктограммы используется целое
23
.

Параметр hDC – идентификатор контекста отображения, полученный для рисования.
Пиктограмма с идентификатором hIcon будет нарисована в точке с координатами (х, у), определяемыми параметрами х и у.
Функция DrawIcon возвращает значение TRUE при успешном
завершении и FALSE при ошибке.
1.4. Курсор мыши
Курсор мыши представляет собой ни что иное, как упрощенный
вариант битового изображения (bitmap), аналогичного пиктограмме
Вы можете выбрать один из встроенных курсоров, либо создать свой
собственный. Для создания своего курсора его надо нарисовать,
пользуясь приложением Resource Workshop, и записать в файл с
расширением имени cur. Далее на файл с курсором следует сделать
ссылку в файле описания ресурсов. После этого приложение может
загрузить курсор в память и использовать его
класса окна, либо для изменения формы курсора в произвольный
момент времени.
1.4.1. Включение курсора в файл описания ресурсов
Для включения курсора в файл описания ресурсов используется
оператор CURSOR, аналогичный оператору ICON:
Cursor ID CURSOR [параметры загрузки] [тип памяти] имя файла.
В качестве параметров загрузки можно указывать значения
PRELOAD или LOADONCALL (используется по умолчанию). Ре
сурс с параметром загрузки LOADONCALL загружается в память
при обращении к нему со стороны приложения. Ресурс типа PRELOAD загружается сразу после запуска приложения.
Тип памяти, выделяемой при загрузки ресурса, может быть
FIXED или MOVEABLE. Дополнительно для ресурсов типа можно
указать MOVEABLE тип DISCARDABLE. Если указан тип FIXED,
ресурс будет находиться в памяти по постоянному адресу. Ресурс
типа MOVEABLE может перемещаться Windows при необходимости уплотнения памяти. Если для перемещаемого ресурса указан тип
DISCARDABLE, Windows может забрать у приложения память, выделенную для ресурса. Если ресурс потребуется приложению, Win-
dows загрузит его повторно из ехе-файла приложения.
24
либо при регистрации
.
-

В качестве имени файла необходимо указать имя файла, подготовленного с помощью приложения Resource Workshop или аналогичного и содержащего курсор, например:
AppCursor CURSOR mycursor.cur
Идентификатор курсора CursorID можно указывать как символическое имя (см. предыдущую строку) или как целое число – идентификатор ресурса:
789 CURSOR custom.cur
После сборки проекта файл курсора будет вставлен в исполняемый файл
LoadCursor:
lpszCursor);
ве параметра hInst необходимо указать идентификатор приложения,
полученный через параметр hInstance функции WinMain. Параметр
lpszCursor должен при этом указывать на идентификатор ресурса.
ставлен символьной строкой, адрес этой строки
в параметре lpszCursor:
вано целое число, следует использовать макрокоманду
приложения Windows.
Для загрузки курсора следует использовать функцию
HCURSOR WINAPI LoadCursor(HINSTANCE hInst, LPCSTR
Для загрузки нового курсора из ресурсов приложения в качест-
Если в файле описания ресурсов идентификатор ресурса пред-
необходимо указать
HCURSOR hCustomCursor;
hCustomCursor = LoadCursor(hInstance, "AppCursor");
Если же в качестве идентификатора ресурса-курсора использо-
MAKEINTRESOURCE:
HCURSOR hCustomCursor;
hCustomCursor == LoadCursor (hInstance,
MAKEINTRESOURCE(789));
25

1.4.2. Встроенные курсоры
Приложение Windows может использовать несколько встроенных курсоров. Приведем список идентификаторов встроенных курсоров.
Идентификатор Применение
IDC_ARROW Стандартный курсор в виде стрелки
IDC_IBEAM Текстовый курсор
IDC_WAIT
IDC_CROSS Курсор в виде перекрестия
IDC_UPARROW Курсор в виде вертикальной стрелки
IDC_SIZE Индикация изменения размера
IDC_ICON Пустая пиктограмма
IDC_SIZENWSE Индикация изменения размера
IDC_SIZENESW Индикация изменения размера
IDC_SIZEWE Индикация изменения размера
IDC_SIZENS Индикация изменения размера
Идентификаторы встроенных курсоров описаны в файле windows.h:
#define IDC ARROW
#define IDC IBEAM
#define IDC WAIT
#define IDC CROSS
#define IDC UPARROW
#define IDC SIZE
#define IDC ICON
#define IDC SIZENWSE
#define IDC SIZENESW
Курсор в виде песочных часов.
Используется при выполнении длительных
операций
26

#define IDC SIZEWE
#define IDC SIZENS
Обратите внимание, что для встроенных пиктограмм и встроенных курсоров используются идентификаторы с одинаковым значением. Например, идентификатор курсора IDC_ARROW и идентификатор пиктограммы IDI_APPLICATION определены одинаково:
#define IDC_ARROW MAKEINTRESOURCE(32512) #define IDI
_APPLICATION MAKEINTRESOURCE(32512)
Здесь нет никакой ошибки. Так как для загрузки курсора используется функция LoadCursor, а для загрузки пиктограммы –
LoadIcon, после загрузки вы получаете идентификатор того
который вам нужен.
Изменение формы курсора
Можно определить форму курсора при регистрации класса окна
или изменить ее в любое время в процессе работы приложения.
При регистрации класса окна мы задавали форму курсора следующим способом:
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
В качестве второго параметра функции LoadCursor вы можете
указать идентификатор встроенного курсора или идентификатор
курсора из файла описания ресурсов. В последнем случае через первый параметр необходимо передать идентификатор текущей копии
приложения:
wc.hCursor = LoadCursor(hInstance, "AppCursor");
Для динамического изменения формы курсора (например, во
время обработки сообщения) следует использовать функцию
SetCursor:
HCURSOR WINAPI SetCursor(HCURSOR hcur);
ресурса,
27

Параметр hcur функции SetCursor должен указывать идентификатор нового курсора, подготовленный при помощи функции LoadCursor. Если указать параметр как NULL, изображение курсора исчезнет с экрана.
Для того чтобы выключить изображение курсора мыши или
вновь включить его, используют функцию ShowCursor: int WINAPI
ShowCursor(BOOL fShow);
Функция управляет содержимым счетчика, который используется для определения момента включения или выключения изображения
курсора мыши. Первоначально содержимое счетчика равно
нулю. Этот счетчик увеличивается, когда необходимо включить
курсор, и уменьшается при выключении курсора. Если счетчик
больше или равен нулю, курсор мыши находится во включенном
(видимом) состоянии.
Для включения курсора в качестве параметра fShow функции
следует передать значение TRUE, для выключения – FALSE.
Возвращаемое функцией ShowCursor значение равно новому
содержимому
счетчика.
1.5. Произвольные данные
Ресурсы приложения Windows могут включать в себя произвольные данные, такие, как таблицы перекодировки, звуковые данные и т.п. При необходимости приложение может загрузить эти
данные в память и делать с ними все что угодно.
1.5.1. Включение произвольных данных в ресурсы приложения
Для включения произвольных данных в ресурсы приложения
файл описания ресурсов должен содержать один или несколько операторов следующего вида:
RId [тип ресурса] [параметры загрузки] [тип памяти] имя файла
RId является идентификатором ресурса. Можно использовать
любое имя или число.
Для типа ресурса вы можете выбрать любое обозначение. Разумеется, не следует выбирать названия предопределенных ресурсов,
такие, как ICON или CURSOR.
Параметры загрузки и тип памяти указываются так же, как и
для других описанной нами
необходимо указать имя файла, содержащего данные, например:
ранее ресурсов. В качестве имени файла
Hello SOUND hello.wav
28

Вся работа по подготовке файла с данными выполняется программистом перед сборкой проекта.
1.5.2. Загрузка произвольных данных из ресурсов приложения
Получение идентификатора произвольных данных из ресурсов
приложения – трехступенчатый процесс. Вначале с помощью
функции FindResource необходимо определить расположение ресурса в файле приложения:
HRSRC WINAPI FindResource(HINSTANCE hInst, LPCSTR lpszName, LPCSTR lpszType);
Параметр hInst является идентификатором модуля, содержащего ресурс. Для
зать его идентификатор, передаваемый функции WinMain через параметр hInstance.
Параметр lpszName должен содержать адрес имени ресурса. Для
загрузки произвольных данных в качестве этого параметра следует
передать указатель на строку, содержащую идентификатор ресурса.
В приведенном выше примере используется идентификатор «Hello».
Параметр lpszType – адрес строки, содержащий тип ресурса.
Для нашего
Таким образом, поиск ресурса, описанного как
Hello SOUND hello.wav
должен выполняться следующим образом:
HRSRC hRsrc; hRsrc = FindResource(hInstance, "Hello", "SOUND");
Функции FindResource в качестве третьего параметра можно
передавать идентификаторы предопределенных типов ресурсов,
список которых приведен ниже
Идентификатор ресурса Название ресурса
RT_ACCELERATOR Таблица акселераторов
извлечения ресурса из приложения вы должны ука-
примера это должна быть строка «SOUND».
RT_BITMAP Изображение bitmap
29

RT_CURSOR Курсор
RT_DIALOG Диалоговая панель
RT_FONT Шрифт
RT_FONTDIR Каталог шрифтов
RT_ICON Пиктограмма
RT_MENU Меню
RT_RCDATA Произвольные данные
RT_STRING Таблица строк
Вы можете использовать функцию FindResource для загрузки
таких ресурсов, как пиктограммы или курсоры, указав ей тип ресурса, соответственно, RT_ICON или RT_CURSOR. Однако в документации к SDK сказано, что загрузку предопределенных ресурсов, таких, как пиктограммы и курсоры, следует выполнять специально
предназначенными для этого функциями (LoadIcon, LoadCursor и т.д.).
На втором этапе, после того
грузить, вызвав функцию LoadResource:
HGLOBAL WINAPI LoadResource(HINSTANCE hInst, HRSRC
hrsrc);
Параметр hInst представляет собой идентификатор модуля, из
файла которого загружается ресурс. Если ресурс загружается из
файла вашего приложения, используйте значение hInstance, полученное через соответствующий параметр функции WinMain.
В качестве второго параметра этой функции следует передать
значение, полученное от функции FindResource.
Третий этап заключается
ной памяти функцией LockResource:
void FAR* WINAPI LockResource(HGLOBAL hGlb);
В качестве параметра hGlb функции LockResource следует передать идентификатор ресурса, полученный от функции LoadRe-
source.
как ресурс найден, его следует за-
в фиксировании ресурса в оператив-
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
