LEKCII (Лекции), страница 7

2017-12-28СтудИзба

Описание файла

Файл "LEKCII" внутри архива находится в папке "Лекции". Документ из архива "Лекции", который расположен в категории "". Всё это находится в предмете "api windows" из 6 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "api windows" в общих файлах.

Онлайн просмотр документа "LEKCII"

Текст 7 страницы из документа "LEKCII"

Оператор MENUITEM имеет следующий формат:

MENUITEM text, id [, param]

Параметр text определяет имя строки меню. Вы должны указать текстовую строку в двойных кавычках, например, "File". Текстовая строка может содержать символы &, \t, \a.

Если в текстовой строке перед буквой стоит знак &, при выводе меню данная буква будет подчеркнута. Клавиша, соответствующая подчеркнутой букве, может быть использована в комбинации с клавишей <Alt> для ускоренного выбора строки. Для того чтобы записать в строку сам символ &, его следует повторить дважды. Аналогично, для записи в строку меню символа двойной кавычки " его также следует повторить дважды.

Символ \t включает в строку меню символ табуляции и может быть использован при выравнивании текста в таблицах. Этот символ обычно используется только во временных и плавающих меню, но не в основном меню приложения, расположенном под заголовком главного окна.

Символ \a выравнивает текст по правой границе временного меню или полосы меню.

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

Необязательный параметр param указывается как совокупность атрибутов, разделенных запятой или пробелом. Эти атрибуты определяют внешний вид и поведение строки меню:

Атрибут

Описание

CHECKED

При выводе меню на экран строка меню отмечается галочкой "

"

GRAYED

Строка меню отображается серым цветом и находится в неактивном состоянии. Такую строку нельзя выбрать. Этот атрибут несовместим с атрибутом INACTIVE

HELP

Слева от текста располагается разделитель в виде вертикальной линии

INACTIVE

Строка меню отображается в нормальном виде (не серым цветом), но находится в неактивном состоянии. Этот атрибут несовместим с атрибутом GRAYED

MENUBREAK

Если описывается меню верхнего уровня, элемент меню выводится с новой строки. Если описывается временное меню, элемент меню выводится в новом столбце

MENUBARBREAK

Аналогично атрибуту MENUBREAK, но дополнительно новый столбец отделяется вертикальной линией (используется при создании временных меню)

Для описания временных меню используется оператор POPUP :

POPUP text [, param]

BEGIN

. . .

. . .

. . .

END

Между строками BEGIN и END в описании временного меню располагаются операторы описания строк MENUITEM и операторы описания вложенных временных меню POPUP.

Параметры text и param указываются так же, как и для оператора MENUITEM .

Для того чтобы создать в меню горизонтальную разделительную линию, используется специальный вид оператора MENUITEM:

MENUITEM SEPARATOR

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

#include "menu.hpp"

APP_MENU MENU

BEGIN

POPUP "&File"

BEGIN

MENUITEM "&New", CM_FILENEW

MENUITEM "&Open...", CM_FILEOPEN

MENUITEM "&Save", CM_FILESAVE

MENUITEM "Save &as...", CM_FILESAVEAS

MENUITEM SEPARATOR

MENUITEM "&Print...", CM_FILEPRINT

MENUITEM "Page se&tup...", CM_FILEPAGE_SETUP

MENUITEM "P&rinter setup...", CM_FILEPRINTER_SETUP

MENUITEM SEPARATOR

MENUITEM "E&xit", CM_FILEEXIT

END

END

Шаблон меню начинается с оператора MENU, в котором определено меню с именем APP_MENU. Это меню состоит из трех временных меню, описанных оператором POPUP.

Для определения строк временных меню используется оператор MENUITEM. В качестве второго оператора используются константы, символическое имя которых имеет префикс CM_. Мы определили эти константы в файле menu.hpp, включаемом в файл описания ресурсов оператором #include (можно использовать любые целые неодинаковые значения):

#define CM_FILEEXIT 24338

#define CM_FILEPRINTER_SETUP 24337

#define CM_FILEPAGE_SETUP 24336

#define CM_FILEPRINT 24335

#define CM_FILESAVEAS 24334

#define CM_FILESAVE 24333

#define CM_FILEOPEN 24332

#define CM_FILENEW 24331

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

Опишем кратко процесс создания шаблона меню при помощи приложения Resource Workshop.

Для того чтобы создать шаблон меню редактором ресурсов Resource Workshop, запустите его и из меню "File" выберите строку "New project...". В появившейся на экране диалоговой панели выберите тип ресурса - файл .RC, вслед за чем нажмите на кнопку "OK". Если файл описания ресурсов проектируемого приложения уже существует, вы можете открыть его, выбрав из меню "File" строку "Open project...".

Далее из меню "Resource" выберите строку "New...". На экране появится диалоговая панель "New resource". В списке "Resource type" выберите строку "MENU" и нажмите кнопку "OK". В главном окне приложения Resource Workshop вы увидите несколько окон, предназначенных для проектирования шаблона меню.

Подключение меню к окну приложения

Следующий этап - подключение меню к окну приложения. Обычно меню определяется для класса окна при регистрации или для отдельного окна при его создании функцией CreateWindow.

Подключение меню при регистрации класса окна

Если при регистрации класса окна в поле lpszMenuName структуры типа WNDCLASS указать адрес текстовой строки, содержащей имя шаблона меню в файле ресурсов, все перекрывающиеся и временные окна, создаваемые на базе этого класса, будут иметь меню, определенное данным шаблоном. Дочерние окна (child window) не могут иметь меню.

Например, пусть в файле описания ресурсов шаблон меню определен под именем APP_MENU:

APP_MENU MENU

BEGIN

....

....

....

END

В этом случае для подключения меню при регистрации класса вы должны записать адрес текстовой строки "APP_MENU" в поле lpszMenuName структуры wc, имеющей тип WNDCLASS:

wc.lpszMenuName = "APP_MENU";

Вы можете использовать для идентификации шаблона меню целые числа (как и для идентификации ресурсов других типов). В этом случае необходимо использовать макрокоманду MAKEINTRESOURCE.

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

#define APP_MENU 123

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

wc.lpszMenuName = MAKEINTRESOURCE(APP_MENU);

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

Когда для класса окна определено меню, все перекрывающиеся и временные окна, создаваемые на базе этого класса, будут иметь меню, если при создании окна функцией CreateWindow идентификатор меню указан как 0.

Графическое изображение типа bitmap

В ресурсы приложения вы можете включить произвольное графическое изображение в виде битового образа (в дальнейшем мы будем называть такое изображение изображением типа bitmap или просто изображением bitmap).

С помощью графического редактора, входящего в состав Resource Workshop, или с помощью стандартного приложения Paint Brush вы можете нарисовать прямоугольное графическое изображение типа bitmap. При этом для представления цвета одного пикселя может использоваться разное количество бит. Изображение записывается в файл с расширением имени bmp.

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

Создание изображения типа bitmap

Для создания изображения bitmap запустите Resource Workshop и из меню "File" выберите строку "New Project". В появившейся диалоговой панели включите переключатель ".BMP" и нажмите кнопку "OK".

Включение изображения bitmap в файл описания ресурсов

Для включения изображения типа bitmap в файл описания ресурсов используется такой же способ, как и для включения пиктограмм. Файл описания ресурсов должен содержать оператор BITMAP:

BitmapID BITMAP [параметры загрузки] [тип памяти] имя файла

Параметры загрузки и тип памяти указывается так же, как и для описанной нами ранее таблицы строк STRINGTABLE, пиктограммы и курсора. В качестве имени файла необходимо указать имя файла, содержащего изображение bitmap, например:

AppBitmap BITMAP mybrush.bmp

Идентификатор изображения bitmap BitmapID можно указывать как символическое имя или как целое число - идентификатор ресурса.

Загрузка изображения bitmap

Для загрузки изображения bitmap вы должны использовать функцию LoadBitmap:

HBITMAP WINAPI LoadBitmap(HINSTANCE hInst,LPCSTR lpszBitmap);

Назначение параметров этой функции аналогично назначению параметров функций LoadIcon и LoadCursor. Параметр hInst указывает идентификатор текущей копии приложения, параметр lpszBitmap - идентификатор bitmap в файле описания ресурсов.

Функция возвращает идентификатор изображения, который следует использовать для рисования bitmap.

Перед завершением работы приложение должно удалить загруженное изображение, вызвав функцию DeleteObject:

BOOL WINAPI DeleteObject(HGDIOBJ hGDIObj);

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

Если при регистрации класса окна было определено меню, вы можете создавать окна с этим меню, или можете указать для создаваемого окна другое меню. Для подключения меню, отличного от указанного в классе окна, вам необходимо задать идентификатор нужного меню при создании окна функцией CreateWindow. Короче говоря, окно может иметь меню, определенное в классе, или свое собственное.

Девятый параметр функции CreateWindow используется для подключения меню к создаваемому окну:

Значение параметра идентификатора меню может быть получено, например, от функции LoadMenu , определенной в программном интерфейсе Windows:

HMENU WINAPI LoadMenu(HINSTANCE hInstance, LPCSTR lpszMenuName);

Параметр hInstance должен содержать идентификатор текущей копии приложения, полученный через соответствующий параметр функции WinMain.

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

Функция LoadMenu возвращает идентификатор загруженного меню или NULL при ошибке.

Перед завершением своей работы приложение должно уничтожить загруженное меню функцией DestroyMenu :

BOOL WINAPI DestroyMenu(HMENU hmenu);

В качестве единственного параметра функции DestroyMenu необходимо указать идентификатор уничтожаемого меню.

Функция DestroyMenu возвращает в случае успеха значение TRUE, при ошибке - FALSE.

Сообщения, поступающие от меню

Меню посылает сообщения в функцию создавшего его окна.

Сообщение WM_INITMENU посылается перед отображением меню и может быть использовано для инициализации. Сообщение WM_COMMAND посылается после того, как пользователь выберет одну из активных строк меню. Системное меню посылает в окно приложения сообщение WM_SYSCOMMAND, которое обычно не обрабатывается приложением (передается функции DefWindowProc). В процессе выбора строки из меню, когда курсор перемещается по строкам меню, функция окна, создавшего меню, получает сообщение WM_MENUSELECT. Перед инициализацией временного меню функция окна получает сообщение WM_INITMENUPOPUP.

Из всех этих сообщений наибольший интерес представляют сообщения WM_INITMENU, WM_INITMENUPOPUP, WM_COMMAND, WM_SYSCOMMAND.

Сообщение WM_INITMENU

Сообщение WM_INITMENU посылается окну, создавшему меню, в момент отображения меню. Это происходит, когда вы нажимаете на строку в полосе меню или активизируете временное меню при помощи клавиатуры.

Вместе с этим сообщением в параметре wParam передается идентификатор активизируемого меню. Параметр lParam не используется.

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

Сообщение WM_INITMENUPOPUP

Сообщение WM_INITMENUPOPUP посылается окну, когда операционная система Windows готова отобразить временное меню. Младшее слово параметра lParam содержит порядковый номер временного меню в меню верхнего уровня, старшее слово содержит 1 для системного меню или 0 для обычного меню.

Это сообщение можно использовать для активизации или блокирования отдельных строк временного меню.

Сообщение WM_COMMAND

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5183
Авторов
на СтудИзбе
435
Средний доход
с одного платного файла
Обучение Подробнее