Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

OC Windows & OC Linux. Лабораторные работы по курсу «Операционные системы»

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
2 Мб
Скачать
Функция 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 загружается в память при обращении к нему со стороны приложения. Ресурс типа PRE­LOAD загружается сразу после запуска приложения.
Тип памяти, выделяемой при загрузки ресурса, может быть 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 должен указывать идентифи­катор нового курсора, подготовленный при помощи функции Load­Cursor. Если указать параметр как 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 lpszNa­me, LPCSTR lpszType);
Параметр hInst является идентификатором модуля, содержаще­го ресурс. Для зать его идентификатор, передаваемый функции WinMain через па­раметр hInstance.
Параметр lpszName должен содержать адрес имени ресурса. Для загрузки произвольных данных в качестве этого параметра следует передать указатель на строку, содержащую идентификатор ресурса. В приведенном выше примере используется идентификатор «Hello».
Параметр lpszType – адрес строки, содержащий тип ресурса. Для нашего
Таким образом, поиск ресурса, описанного как
Hello SOUND hello.wav
должен выполняться следующим образом:
HRSRC hRsrc; hRsrc = FindResource(hInstance, "Hello", "SO­UND");
Функции 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