Меню в Windows-приложениях
Меню в системе Windows являются, пожалуй, самым распространенным элемен-
том пользовательского интерфейса. Мы не будем особенно вдаваться в детали раз-
Углубленное программирование на ассемблере для Win32 407
работки приложения с меню, так как это уже делалось при рассмотрении каркас-
ного приложения. Содержание этого процесса стандартное, поэтому мы остано-
вимся только на специфических моментах его реализации при разработке прило-
жения на ассемблере. Для того чтобы включить меню в приложение, необходимо
реализовать следующую последовательность шагов.
1. Разработка сценария меню. Перед тем как приступить к процессу включения
меню в конкретное приложение, разработаем его логическую схему. Этот шаг
необходим для того, чтобы уже на стадии проектирования обеспечить эргоно-
мические свойства приложения. Ведь меню — это один из немногих элементов
с которым пользователь вашего приложения будет постоянно иметь
дело. Поэтому схема меню должна иметь наглядную иерархическую структуру
с логически увязанными между собой пунктами, что поможет пользователю
эффективно задействовать все возможности приложения. Для того чтобы вес-
ти предметный разговор, поставим себе задачу разработать для окна нашего
приложения главное меню. При этом мы исследуем возможности вывода в окно
приложения текста и графики, а также покажем способы решения общих про-
блем, связанных с разработкой приложения. Наше меню будет довольно про-
стым и состоять из трех пунктов: Текст, Графика и 0 приложении, — причем пер-
вые два пункта будут открывать доступ к подменю. Иерархическая структура
меню представлена на рис. 16.2.
О
-
— DrawText
— Примитивы
Отрезок
Прямоугольник
— Эффекты
Павлин
Кружева
Рис.
Иерархическая структура меню
2. Описание схемы меню в файле ресурсов. Для выполнения этого этапа требуют-
ся специальные операторы. В нашем случае файл ресурсов будет выглядеть
следующим образом:
файла
M E N U DISCARDABLE
{
POPUP
{
IDM_DRAWTEXT
MENUITEM
}
POPUP
{
POPUP
{
MENUITEM
MENUITEM
POPUP
408 Глава
Создание Windows-приложений на ассемблере
}
}
MENUITEM
IDM_ABOUT
}
3. Составление текста включаемого файла, необходимого для компиляции ресурс-
ного файла. В нашем случае файл называется
и выглядит следующим
образом:
MYMENU 999
101
102
103
IDM_PEACOCK 104
105
106
В этом файле идентификаторам пунктов меню назначаются константы, кото-
рые впоследствии будут передаваться в оконную процедуру в
слове
параметра wParam сообщения
что имени самого меню
также назначена константа. К этому моменту мы вернемся чуть позже.
4. Компиляция ресурсного файла. Для этого используется утилита brc32.exe:
[ключи ...]
Если утилита заканчивает свою работу нормально, то создается файл с расши-
рением
В случае, если утилита обнаруживает ошибки в исход-
ном ресурсном файле, она выдает на экран соответствующие диагностические
сообщения. Для удобства работы с ними их можно записать в файл, перенапра-
вив вывод сообщений с экрана в файл, используя оператор командной строки
[ключи ...]
>
например, так:
brc32
> р
5. Подключение меню на стадии регистрации того окна приложения, для работы
с которым оно будет использоваться. Для этого существуют два основных спо-
соба:
D первый способ — поместить в поле
экземпляра структуры
WNDCLASS (строка 101 листинга 16.4) указатель на поле, содержащее имя
меню:
menu db "MYMENU"
ptr
offset menu
D второй способ — назначить ресурсу меню символическую константу, кото-
рая расположена в поле имени оператора
файла ресурсов:
56 M E N U D I S C A R D A B L E ;оператор из файла ресурсов
Углубленное программирование на ассемблере для Win32 409
Чтобы использовать упомянутую на
шаге символическую констан-
ту, необходимо вставить в файлы, из которых собирается приложение, дополни-
тельные строки:
Файл ресурсов:
MYMENU
Файл
tfdefine MYMENU 56
si Файл menu.inc:
MYMENU equ 56
И Строка 101 из листинга 16.4 должна выглядеть так:
m o v
p t r
M Y M E N U
Или так:
mov dword ptr
56
Вторым способом мы фактически смоделировали макрос
из-
вестный Windows-программистам, пишущим приложения на языке C/C++.
После внесения всех изменений в верхней части окна появится строка меню.
Далее необходимо в оконную функцию включить команды, реализующие реак-
цию на выбор пунктов этого меню. Эта информация передается в младшем слове
поля wParam сообщения WM_COMMAND. В листинге 16.7 приведен измененный текст
каркасного приложения, дополненный меню.
Листинг
Пример приложения с использованием меню
<1>
приложения для W i n 3 2 с использованием меню
<2>
. 3 8 6
<3> locals
применение локальных меток в программе
<4>
flat,
;модель памяти flat,
<5>
- передача параметров в стиле С (справа
<6>
процедура чистит за собой стек
<7> include
файл с описаниями базовых структур
;и констант Win32
<8> include menu.inc
файл с определением имен
меню
<9> ;0бъявление внешними используемых в данной программе
;функций Win32
<10> extrn
< . . . >
<37> extrn
<38> ;объявление оконной функции объектом,
за пределами данного кода
<39> public WindowProc
<41> hwnd dd 0
<42>
dd 0
<43>
OSVERSIONINFO >
<44> wcl WNDCLASSEX >
<45> message MSG >
<46> ps PAINTSTRUCT >
<47>
RECT>
<48>
db
0
<49> szTitleName db
приложение Win32 на
0
<50>
db
Ну как вам процесс разработки приложения
на
<51>
$-MesWindow продолжение
Глава
Создание Windows-приложений на ассемблере
Листинг
(продолжение)
<52>
db
0
<53>
db
0
<54>
db
0
<55>
<56> start proc near
<57> ;точка входа в программу:
<58>
стартового кода
<59>
<60>
55-72 листинга 16.4
<62> ;конец стартового кода
<63>
<64>
64>63>62>60>59>58>57>56>55>54>53>52>51>50>49>48>47>46>45>44>43>42>41>39>38>37>10>9>8>7>6>5>4>3>2>1> Do'stlaringiz bilan baham: |