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

лекции / Shchupak_Yu._Win32_API_Razrabotka_prilozheniy_dlya_Windows

.pdf
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
13.15 Mб
Скачать

Ìûøü

241

 

 

 

if (0x80 & status) SendMessage(hWnd, WM_VSCROLL, SB_TOP, 0); else SendMessage(hWnd, WM_HSCROLL, SB_TOP, 0); break;

case VK_END:

status = GetKeyState(VK_CONTROL);

if (0x80 & status) SendMessage(hWnd, WM_VSCROLL, SB_BOTTOM, 0);

else

SendMessage(hWnd, WM_HSCROLL, SB_BOTTOM, 0);

break;

 

}

 

break;

 

case WM_PAINT:

hDC = BeginPaint(hWnd, &ps); doc.PutText(hWnd, hDC); EndPaint(hWnd, &ps);

break;

case WM_DESTROY: PostQuitMessage(0); break;

default:

return (DefWindowProc(hWnd, uMsg, wParam, lParam));

}

return 0;

}

//////////////////////////////////////////////////////////////////////

В этом приложении добавлены обработка сообщения WM_MOUSEWHEEL и обра ботка сообщения WM_KEYDOWN.

Обратите особое внимание на преобразование к типу short выражения (short) HIWORD(wParam) в блоке обработки сообщения WM_MOUSEWHEEL. Если этого не сде лать, вы будете поражены неприятным поведением программы.

При обработке сообщения WM_MOUSEWHEEL учитывается состояние клавиши Shift. Если эта клавиша не нажата, то прокрутка колесика мыши управляет верти кальным скроллингом, если нажата — горизонтальным скроллингом.

Сравните работу первоначального варианта приложения для просмотра тек стовых файлов TextViewer и новой программы TextViewerAdv.

242

Глава 5. Ресурсы Windows-приложения

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

Ресурсы являются составной частью приложений для Windows. В них определя ются такие объекты, как пиктограммы, курсоры, растровые образы, таблицы строк, меню, диалоговые окна и многие другие.

Для некоторых видов ресурсов система содержит предопределенные (стандарт ные) объекты. Например, в листинге 1.1 уже использовались стандартная пиктог рамма и стандартный курсор, для чего задавались соответствующие значения тем или иным полям класса окна.

Все нестандартные ресурсы должны быть определены в файле описания ресур сов (resource script), который является ASCII файлом с расширением .rc. Хотя тео ретически такой файл можно подготовить в обычном текстовом редакторе, по добная технология используется крайне редко, поскольку любая интегрированная среда содержит удобные редакторы ресурсов, максимально упрощающие и автоматизирующие этот процесс.

Когда программист начинает работу над новым проектом, обычно в нем нет никаких ресурсов. При попытке создать новый ресурс или импортировать су ществующий ресурс интегрированная среда MS Visual Studio 6.0 вызывает со ответствующий редактор ресурсов. После создания ресурса его нужно сохра нить в составе проекта при помощи команды меню File Save. Среда разработки Visual Studio предлагает для файла описания ресурсов имя по умолчанию script1.rc. Традиционно программисты предпочитают давать файлу описания ресурсов то же имя, которое используется и для самой программы (например,

MyApp.rc).

Файл описания ресурса транслируется компилятором ресурсов (файл rc.exe в составе интегрированной среды). В результате образуется бинарный файл с рас ширением .res. Затем компоновщик включает полученный файл в выполняемый файл программы вместе с обычным кодом и данными программы из файлов с рас ширениями .obj и .lib. При работе в среде Visual Studio после выполнения коман ды Build все эти шаги производятся автоматически.

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

Пиктограммы

243

 

 

 

Редакторы ресурсов

Редакторы ресурсов содержат инструменты и интерфейсы для быстрого и удоб ного обслуживания ресурсов приложения. В составе MS Visual Studio 6.0 имеется следующий набор редакторов ресурсов:

графический редактор, который помогает создавать пиктограммы, курсоры, ра стровые образы;

редактор меню;

редактор таблиц быстрых клавиш;

редактор диалоговых окон;

редактор таблиц строк;

редактор панелей инструментов;

редактор информации о версии;

редактор ресурсов, определяемых программистом.

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

В этой главе рассматриваются пиктограммы, курсоры, растровые образы, таб лицы строк и ресурсы, определяемые программистом1. Кроме этого приводятся функции для воспроизведения звуковых файлов. В главах 6, 7 и 8 рассматрива ются ресурсы меню, окна диалога и панели инструментов соответственно.

Пиктограммы

Пиктограммы — это небольшие растровые изображения, применяемые Windows для визуального представления приложений, файлов и каталогов. Пиктограмма, включенная в состав приложения, выводится на экран в левом верхнем углу стро ки заголовка окна приложения. Кроме того, Windows выводит на экран значок пиктограммы в списке программ меню Start (Ïóñê), на панели задач, когда окно приложения свернуто, и в списке файлов, отображаемых программой Windows Explorer в открытой папке. Также пиктограммы отображаются на рабочем столе, предоставляя доступ к системным папкам и к ярлыкам исполняемых файлов.

Ранние версии Windows могли отображать пиктограммы размером только 32 × 32 пиксела. Начиная с Windows 95, пиктограммы могут иметь один из трех типовых размеров: 16 × 16 пикселов для малых пиктограмм, 32 × 32 пикселов для

стандартных пиктограмм и 48 × 48 пикселов для больших пиктограмм. Обычно малые и стандартные пиктограммы являются 16 цветными, а большие пикто граммы могут использовать 256 цветов. Маленький значок используется в заголов ке приложений, на панели задач и в списках программ меню Start. Пиктограммы,

1В литературе и документации (MSDN) принят термин «ресурсы, определяемые пользователем». Но он не очень удачен, так как в качестве пользователя здесь подразумевается именно программист. Это при водит к путанице, когда в контексте упоминается настоящий пользователь — человек, эксплуатирую щий вашу программу. Поэтому мы будем применять термин «ресурсы, определяемые программистом».

244

Глава 5. Ресурсы Windows-приложения

 

 

отображающиеся на рабочем столе, имеют стандартный размер. Для окон папок, открываемых Windows Explorer, пользователь может настроить режим показа маленьких или стандартных значков.

Большие значки (48 Ч 48) могут появиться вместо стандартных значков, если только изменить настройку для размера пиктограмм в системном реестре Windows. Пользователь может сделать это при помощи диалогового окна, которое отобра жается после выполнения команды Панель управления Экран Оформление. В диа логовом окне Свойства: Экран следует выбрать тип элемента Значок и установить нужную величину в окне Размер.

Графический редактор Visual Studio, используемый в режиме создания пик тограммы, формирует файл с расширением .ico, содержащий один или несколько значков из следующего списка:

Стандартный формат 32 × 32, 16 цветов (вариант по умолчанию).

Стандартный формат 32 × 32, 256 цветов.

Большой формат 48 × 48, 256 цветов.

Монохромный формат 32 × 32, черно белая пиктограмма.

Маленький формат 16 × 16, 16 цветов.

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

Рассмотрим процесс проектирования конкретного приложения, в котором ис пользуется ресурс пиктограммы. Потом в это приложение будут включены ре сурсы специализированных курсоров. На следующем этапе к приложению будет добавлен ресурс битового образа с изображением государственного флага Рос сии. В последней версии программы мы заставим ее проигрывать звуковой файл с государственным гимном России. Итак, приступим…

Создайте новый проект типа Win32 Application с именем Russia.

Добавьте к нему новый файл с именем Russia.cpp, а затем введите в файл код, приведенный в листинге 5.1.

Листинг 5.1. Проект Russia (начальная редакция)

//////////////////////////////////////////////////////////////////////

// Russia.cpp #include <windows.h> #include "KWnd.h"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //==================================================================== int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPSTR lpCmdLine, int nCmdShow)

{

MSG msg;

KWnd mainWnd("Russia today", hInstance, nCmdShow, WndProc, NULL, 0, 0, 400, 300);

while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg);

Пиктограммы

245

 

 

 

DispatchMessage(&msg);

}

return msg.wParam;

}

//==================================================================== LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

switch (uMsg)

{

case WM_DESTROY: PostQuitMessage(0); break;

default:

return DefWindowProc(hWnd, uMsg, wParam, lParam);

}

return 0;

}

//////////////////////////////////////////////////////////////////////

Скопируйте в папку проекта Russia файлы KWnd.h и KWnd.cpp, которые исполь зовались в проекте Hello2 (листинг 1.2), и добавьте их в состав проекта Russia. Пос ле этого рабочий стол Visual Studio будет выглядеть примерно так, как показано на рис. 5.1.

Рис. 5.1. Рабочий стол Visual Studio после создания проекта Russia

Обратите внимание на то, что окно Workspace содержит только две вкладки: ClassView и FileView. В настоящий момент открыта вкладка FileView с древовидным списком файлов, включенных в состав проекта.

246

Глава 5. Ресурсы Windows-приложения

 

 

Создание пиктограммы с помощью графического редактора

Общий сценарий добавления к проекту новой пиктограммы включает следую щие шаги:

1.Вызов графического редактора. В главном меню Visual Studio выполните ко манду Insert Resource. Это приведет к отображению диалогового окна Insert Resource (рис. 5.2).

Рис. 5.2. Диалоговое окно Insert Resource

В окне нужно выбрать тип ресурса Icon и нажать кнопку New. Появится окно графического редактора Script1 — IDI_ICON1 с заготовкой стандартной пикто граммы (рис. 5.3).

Рис. 5.3. Рабочий стол Visual Studio после вызова графического редактора

Пиктограммы

247

 

 

 

Обратите внимание на две панели инструментов в правой части рабочего стола. Панель Graphics содержит инструменты рисования, а панель Colors — палитру доступных цветов. Если по каким либо причинам эти панели не будут видны, нужно щелкнуть правой кнопкой мыши на их месте и в появившемся контек стном меню включить соответствующие флажки Graphics и Colors.

2.Выбор формата пиктограммы. Комбинированный список Device в окне гра фического редактора поначалу содержит только один формат Standard (32×32). Но справа от этого списка располагается кнопка New Device Image. Если ее на жать, то появится окно New Icon Image со списком Target device (рис. 5.4).

Рис. 5.4. Диалоговое окно New Icon Image

Вы можете выбрать из списка любой дополнительный формат и, нажав кноп ку OK, добавить его в список Device.

Для программы Russia.cpp нужно создать стандартную и малую пиктограммы. Поэтому выберите в предлагаемом списке строку Small(16×16) и нажмите кноп ку OK. Окно графического редактора переключится на заготовку малой пик тограммы.

3.Назначение ресурсу идентификатора. Обратите внимание на заголовок в окне графического редактора: Script1 — IDI_ICON1 (Icon). Первая часть заголовка со держит имя файла описания ресурсов. По умолчанию редактор предлагает имя Script1, если создаваемый ресурс является первым в данном проекте. Если же некий ресурс уже добавлялся ранее, то на этом месте отображается то имя, под которым был сохранен файл описания ресурсов (см. п. 5).

Вторая часть заголовка содержит идентификатор создаваемого ресурса. По умол чанию редактор предлагает имя IDI_ICON1. Если вы будете добавлять в проект другие пиктограммы, то редактор предложит идентификаторы по умолчанию IDI_ICON2, IDI_ICON3 и т. д. Для долгосрочного сопровождения проекта такая си стема наименований — не самое лучшее решение. Поэтому рекомендуется при сваивать ресурсам идентификаторы, отражающие их семантику. В создаваемой программе пиктограмма будет изображать трехцветный российский флаг, по этому более подходящим оказался бы идентификатор IDI_TRICOLOUR.

Для изменения идентификатора нужно дважды щелкнуть левой кнопкой мыши на пустом месте в окне редактирования. На экране появится окно Icon Properties (рис. 5.5).

На вкладке General располагается текстовое поле ID для ввода идентификатора и текстовое поле File name с именем файла, в котором будет сохранено изобра жение пиктограммы. Введем для нашей программы идентификатор ресурса

IDI_TRICOLOUR и изменим имя файла на tricol.ico.

248

Глава 5. Ресурсы Windows-приложения

 

 

Ðèñ. 5.5. Îêíî Icon Properties

Прежде чем закрыть это окно, переключитесь на вкладку Palette. Здесь вы уви дите 16 доступных цветов для изображения пиктограммы. Это те же самые цвета, которые содержит панель инструментов Colors. Но если вы будете рабо тать с 256 цветным форматом, то палитра будет содержать 256 цветов, и выби рать текущий цвет для рисования можно будет только здесь.

Закройте окно Icon Properties, нажав кнопку с крестиком в полосе заголовка. После этого заголовок окна графического редактора изменится на Script1 — IDI_TRICOLOUR.

4.Рисование. Сейчас в окне графического редактора находится заготовка малой пиктограммы (16 × 16). Так же, как на рис. 5.3, она представляет собой квадрат, все пикселы которого окрашены в темно бирюзовый (dark cyan) цвет. На са мом деле пикселы этого цвета интерпретируются графическим редактором как прозрачные1.

Пользуясь инструментами рисования на панели Graphics, создайте нужный рисунок. Текущий цвет выбирается на панели Colors. Процедура рисования очень похожа на создание рисунка в графическом редакторе MS Paint, поэто му не будем подробно ее описывать. Результат рисования малой пиктограммы показан на рис. 5.6.

Рис. 5.6. Окно графического редактора с изображением малой пиктограммы

Черно белый рисунок не передает всей информации. На самом деле верхняя часть изображения содержит белый цвет, средняя часть — голубой цвет и нижняя — красный цвет. Обрамляет пиктограмму рамка белого цвета толщиной 1 пиксел2.

1Вы можете проверить это, оставив на каком нибудь изображении часть пикселов заготовки в ис ходном состоянии.

2Если вы загрузите исходный код проекта Russia из файлов к книге, доступных на сайте издательства «Питер» (www.piter.com), то сможете увидеть все ресурсы изображения в их истинном цвете.

Пиктограммы

249

 

 

 

Теперь создайте изображение стандартной пиктограммы (32×32), переключив шись на ее заготовку при помощи списка Device. Размеры стандартной пикто граммы позволяют сделать ее более информативной. На средней части флага надо нарисовать текстовую надпись «Russia», а рамку значка выделить светло серым цветом (рис. 5.7).

Рис. 5.7. Окно графического редактора с изображением стандартной пиктограммы

Если вам понадобится создать рисунок, использующий 256 цветную палит ру, то цвет нужно будет выбирать на вкладке Palette в окне Icon Properties (см. рис. 5.5).

5.Сохранение созданного ресурса в файле описания ресурсов. В главном меню Visual Studio выполните команду File Save.

Если создаваемый ресурс — не первый и файл описания ресурсов уже суще ствует, то описание созданного ресурса будет просто добавлено в существую щий файл.

Если создаваемый ресурс является первым в проекте, то появится окно диалога Save As(Сохранить как). По умолчанию в окне File Name(Имя файла) предлагает ся имя Script1.rc. Замените часть имени Script1 на имя приложения, в данном слу чае на имя Russia, и нажмите кнопку Save (Сохранить). Теперь в заголовке окна графического редактора будет отображаться строка Russia.rc — IDI_TRICOLOUR.

Теперь необходимо добавить файл описания ресурсов к проекту. Для этого в окне Workspace щелкните правой кнопкой мыши на папке Resource Files и в открывшемся контекстном меню выберите пункт Add Files to Folder. В открыв шемся окне диалога Insert Files нужно выбрать необходимый файл. В нашем примере к проекту добавляется файл Russia.rc, и после этого рабочий стол Visual Studio будет иметь вид, показанный на рис. 5.8.

Обратите внимание на изменения, произошедшие на вкладке FileView. Папка Resource Files теперь содержит два файла: файл описания ресурсов Russia.rc и графический файл tricol.ico. Кроме того, в окне Workspace появилась новая вкладка ResourceView. Если переключиться на нее, то можно увидеть список ре сурсов проекта, содержащий пока только папку Icon c единственным ресурсом

IDI_TRICOLOUR.

250

Глава 5. Ресурсы Windows-приложения

 

 

Рис. 5.8. Рабочий стол Visual Studio после добавления к проекту файла описания ресурсов

6.Добавление к проекту заголовочного файла resource.h (только для первого создаваемого ресурса). Наряду с файлом описания ресурсов, редактор ресур сов создает еще и заголовочный файл resource.h, содержащий определения ис пользуемых именованных констант. Если создаваемый ресурс — первый, то кроме добавления к проекту файла описания ресурсов надо также добавить и указанный заголовочный файл. Для этого в окне Workspace щелкните правой кнопкой мыши на папке Header Files и в открывшемся контекстном меню вы полните команду Add Files to Folder. Далее в открывшемся окне диалога Insert Files следует выбрать файл resource.h.

ПРИМЕЧАНИЕ

Пока заголовочный файл resource.h используется только в одном проекте, нас устраивает его имя, создаваемое редактором ресурсов. Если же проект предназначен для создания динамически загружаемой библиотеки (DLL), экспортирующей ресурсы в другие проекты, то следует побеспокоиться об уникальности имени ее заголовочного файла. Более подробно этот вопрос рассматривается в главе 11.

На этом завершается рассмотрение процедуры создания и включения в про ект новых пиктограмм. В разделе «Использование ресурса в приложении» будет показано, что нужно добавить в код программы, чтобы эти пиктограммы стали значками приложения.

Импорт существующей пиктограммы

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