Окна сообщений MessageBox

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

Для сотворения окна сообщения следует использовать функцию API MessageBox(), которая имеет Окна сообщений MessageBox макет:

int MessageBox(HWND hwnd,

LPCSTR lpText, LPCSTR lpCaption,

UINT wMBType);

Параметр hwnd – это дескриптор родительского окна; параметр lpText – указатель на строчку сообщения, отображаемую снутри окна сообщения; lpCaption показывает на строчку, применяемую в качестве заголовка окна сообщения. Параметр wMBType является композицией значений, которые определяют характеристики окна сообщения, включающие Окна сообщений MessageBox типы «кнопок», которые должны находиться, и дополнительную иконку рядом с текстом сообщения. Эти макросы определены в файле windows.h. Нужный набор параметров можно получить объединив эти значения с помощью логического сложения. Функция MessageBox() возвращает значение, соответственное действию юзера. Надлежащие кнопки могут находиться зависимо от значения wMBType. В таблице 4.1 приведены вероятные возвращаемые Окна сообщений MessageBox значения этой функции.


Таблица 4.1

Значения функции MessageBox

Нажатая кнопка Возвращаемое значение
Abort IDABORT
Retry IDRETRY
Ignore IDIGNORE
Cancel IDCANCEL
No IDNO
Yes IDYES
OK IDOK

Чтоб окно сообщения появилось на дисплее, просто вызовите функцию MessageBox(), Windows покажет окно сообщения при первой же способности. При всем этом не надо Окна сообщений MessageBox получать контексты устройств либо обрабатывать какие-либо сообщения. В этом случае Windows делает все это без помощи других. (Простота использования делает окна сообщений красивым средством отладки, когда нужно просто и стремительно вывести что-либо на экран.) Некие значения, которые могут быть применены для wMBType, приведены в таблице 4.2.

Таблица 4.2

Значения wMBType

Значение Окна сообщений MessageBox Возвращаемое значение
МB_ABORTRETRYIGNORE Отображение кнопок Abort, Retry, и Ignore
MB_ICONEXCLAMATION Показ иконки «восклицательный знак»
MB_ICONHAND Отображается иконка «знак Стоп»
MB_ICONINFORMATION Отображается иконка «информация»
MB_ICONQUESTION Показ иконки «вопросительный знак»
MB_ICONSTOP То же, что и MB_ICONHAND
MB_OK Отображается кнопка ОК
MB_OKCANCEL Окна сообщений MessageBox Показываются кнопки ОК и Cancel
MB_RETRYCANCEL Показываются кнопки Retry и Cancel
MB_YESNO Показываются кнопки Yes и No
MB_YESNOCANCEL Отображается кнопка Yes

Пример 4-1. Вот обычный пример программки, отображающей окно сообщения при нажатии кнопки мыши:

// Демонстрация окон сообщений

#include

#include

#include

LRESULT CALLBACK WindowFunc(HWND, UINT,

WPARAM, LPARAM);

char szWinName[]="МоеОкно"; // Имя Окна сообщений MessageBox класса окна

int WINAPI WinMain(HINSTANCE hThisInst,

HINSTANCE hPrevInst,

LPSTR lpszArgs,

int nWinMode)

{

HWND hwnd;

MSG msg;

WNDCLASS wcl; // Найти класс окна

wcl.hInstance=hThisInst; // Дескриптор приложения

wcl.lpszClassName=szWinName; // Имя класса окна

wcl.lpfnWndProc=WindowFunc; // Функция окна

wcl.style=0; // Стиль по дефлоту

wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);// Иконка

wcl.hCursor=LoadCursor Окна сообщений MessageBox(NULL,IDC_ARROW); // Курсор

wcl.lpszMenuName=NULL; // Без меню

wcl.cbClsExtra=0; // Без дополнительной инфы

wcl.cbWndExtra=0;

wcl.hbrBackground=

(HBRUSH)GetStockObject(WHITE_BRUSH); //Белоснежный фон

if(!RegisterClass(&wcl)) // Регистрируем класс окна

return 0;

hwnd=CreateWindow(szWinName, // Сделать окно

"Обработка сообщений мыши",

WS_OVERLAPPEDWINDOW, // Стиль окна

CW_USEDEFAULT, // x-координата

CW_USEDEFAULT, // y-координата

CW_USEDEFAULT, // Ширина

CW_USEDEFAULT, // Высота

HWND_DESKTOP, // Нет родител. окна

NULL Окна сообщений MessageBox, // Нет меню

hThisInst,// Дескриптор приложения

NULL); // Нет дополнит. аргументов

ShowWindow (hwnd, nWinMode); // Показать окно

UpdateWindow (hwnd); // и перерисовать

while(GetMessage(&msg,NULL,0,0)) // Запустить цикл

{ // обработки сообщений

TranslateMessage(&msg); // Разреш. исп. клавиатуры

DispatchMessage (&msg); // Возвратить управл. Windows

}

return msg.wParam;

}

// Последующая функция вызывается операционной

// системой Windows и получает в качестве

// характеристик сообщения из очереди сообщений

// данного приложения

LRESULT CALLBACK WindowFunc(HWND hwnd,

UINT message Окна сообщений MessageBox,

WPARAM wParam,

LPARAM lParam)

{

int response;

switch(message)

{

case WM_RBUTTONDOWN: // Нажата правая кнопка мыши

response = MessageBox(hwnd,

"Изберите действие",

"Правая кнопка",

МB_ABORTRETRYIGNORE);

switch(response)

{

case IDABORT:

MessageBox(hwnd, "", "Abort", MB_OK);

break;

case IDRETRY:

MessageBox(hwnd, "", "Retry", MB_OK);

break;

case IDIGNORE:

MessageBox(hwnd, "", "Ignore", MB Окна сообщений MessageBox_OK);

break;

}

break;

case WM_LBUTTONDOWN: // Нажата левая кнопка мыши

response = MessageBox(hwnd,

"Продолжить?",

"Левая кнопка",

MB_ICONHAND | MB_YESNO);

switch(response)

{

case IDYES:

MessageBox(hwnd, "Нажато", "Yes", MB_OK);

break;

case IDNO:

MessageBox(hwnd, "Нажато", "No", MB_OK);

break;

}

break;

case WM_DESTROY: // Окончание программки

PostQuitMessage(0);

break;

default:

// Все Окна сообщений MessageBox сообщения, не обрабатываемые в

// данной функции, направляются на обработку

// по дефлоту

return DefWindowProc(hwnd,message,

wParam,lParam);

}

return 0;

}

Рис. 4.1. Сообщение при нажатой правой кнопке

Всякий раз при нажатии кнопки мыши отображается окно сооб

щения. К примеру, при нажатии правой кнопки появится окно как на рис. 4.1. Видите ли, в окне сообщения находятся кнопки Abort (Оборвать Окна сообщений MessageBox), Retry (Повтор) и Ignore (Пропустить). При нажатии хоть какой из их появится 2-ое окно сообщения, показывающее, какая из кнопок была нажата. Нажатие левой кнопки мыши приведет к возникновению окна сообщения с клавишами Yes, No и иконкой «знак Стоп».

Поэкспериментируйте без помощи других с окнами сообщений, изменяя их тип.


Представляем меню

Меню в Окна сообщений MessageBox Windows являются более всераспространенным элементом управления. Все главные окна программ имеют связанные с ними меню. Так как меню так всераспространены и важны для приложений, Windows обеспечивает для их довольно массивные средства поддержки. Включение меню в программку просит последующих шагов:

1) определение формы меню в файле ресурсов;

2) загрузка меню при Окна сообщений MessageBox разработке головного окна в программке;

3) обработка событий меню.

Меню верхнего уровня показываются в Windows вверху, под заголовками окон. Подменю показываются как выпадающие меню. (Вам придется привыкнуть к этому методу, так как он употребляется во всех Windows-программах.)

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

Внедрение ресурсов

Некие типы объектов определяются в Windows как ресурсы. Ресурсы – это объекты, которые употребляются в программке, но не определяются в ней. Это касается меню, иконок, диалогов и графических растровых изображений. Так как меню является ресурсом, до того как включать его в программку, нужно изучить, как Окна сообщений MessageBox работать с ресурсами.

Ресурсы создаются раздельно от текстов программки и добавляются в ЕХЕ-файл при сборке программки. Они содержатся в файлах ресурсов, имеющих суффикс RC. Название файла ресурсов время от времени совпадает с именованием ЕХЕ-файла Вашей программки. К примеру, если именованием программки является Example.exe, файл ресурсов можно Окна сообщений MessageBox именовать как Example.rc (но – это совершенно необязательно).

Некие ресурсы являются текстовыми файлами, которые могут создаваться с помощью обыденного редактора текста. Такие текстовые ресурсы обычно описываются снутри файла ресурсов. Некие ресурсы, такие как иконки, проще всего строить, используя редактор ресурсов; но файл ресурсов, все же, должен содержать Окна сообщений MessageBox ссылки на их. Примеры файлов ресурсов, приведенные в этой главе, являются просто текстовыми файлами, так как меню описываются при помощи обыденного текста.

Файлы ресурсов не являются программками на С либо C++. Они употребляют особый язык ресурсов и компилируются компилятором ресурсов, генерирующим из RC-файлов особые RES-файлы, которые Окна сообщений MessageBox могут компоноваться с Вашей программкой.

Компиляция RC-файлов. Файлы ресурсов конкретно не употребляются Вашей программкой, – они должны быть преобразованы во внутренний формат, применяемый при сборке. После сотворения RC-файла нужно скомпилировать его в RES-файл, используя компилятор ресурсов (компилятор ресурсов в большинстве случаев именуется rc.exe, но может иметь и другое имя Окна сообщений MessageBox). Как компилировать ресурсы – находится в зависимости от применяемого Вами компилятора. Не считая того, некие встроенные средства программи­рования делают это автоматом. В любом случае в итоге будет получен RES-файл, который необходимо скомпоновать с Вашей программкой, чтоб получить готовое приложение для Windows.

Замечание: просмотрите раздел Управления юзера для Окна сообщений MessageBox Вашего компилятора, в кото­ром говорится об использовании файлов ресурсов.

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

MenuName MENU [параметры]

{

элементы меню

}

Тут MenuName – это имя меню (оно может быть также макроименем, представ­ляющим целочисленный Окна сообщений MessageBox идентификатор меню, но все примеры, приведенные в книжке, для воззваний к меню будут использовать строковые имена). Ключевое слово MENU обозначает начало определения меню. Имеется также несколько характеристик, которые могут быть указаны при разработке меню. Они приведены в 4.3; их макроимена определены все в том же файле Windows.h. Все примеры этой книжки Окна сообщений MessageBox просто употребляют характеристики по дефлоту и не задают их в описаниях меню.

Таблица 4.3

Характеристики MENU

Параметр Возвращаемое значение
DISCARDABLE Неиспользуемое меню может быть удалено из памяти
FIXED Меню фиксировано в памяти
LOADONCALL Меню загружается только перед конкретным внедрением
MOVEABLE Меню может передвигаться в памяти
PRELOAD Меню загружается в момент старта программки Окна сообщений MessageBox

В Windows имеется два типа частей меню: MENUITEM и POPUP. Элемент MENUITEM определяет обыденный элемент меню, а POPUP –специфицирует выпадающее подменю, которое может в свою очередь содержать элементы типа MENUITEM и POPUP. Общая форма соответственных операторов последующая:

MENUITEM "Имя", MenuID[,параметры]

POPUP "имя" [,параметры]

Тут Имя является Окна сообщений MessageBox именованием элемента меню, к примеру Файл либо Помощь. MenuID – это уникальный целочисленный идентификатор, ассоциированный с данным элементом меню; этот идентификатор передается в программку, если юзер выбирает этот элемент меню. Обычно такие идентификаторы определяются как макроимена в отдельном файле, включаемом и в программку, и в RC-файл. Значение характеристик (определенные в Windows.h Окна сообщений MessageBox) приводятся в таблице 4.4.

Таблица 4.4


okonkurse-professionalnogo-masterstva-kadastrovih-inzhenerov.html
okonnie-koordinati-cveta-otobrazhenie-strok.html
okopnik-lekarstvennij-referat.html