GUI -приложения: структура сообщения, процесс обработки сообщений. — КиберПедия 

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

GUI -приложения: структура сообщения, процесс обработки сообщений.

2023-01-01 32
GUI -приложения: структура сообщения, процесс обработки сообщений. 0.00 из 5.00 0 оценок
Заказать работу

GUI – Graphical User Interface – графический интерфейс пользователя

Сообщение представляется следующей структурой:

typedef struct {

    HWND hwnd;

    UINT message;

    WPARAM wParam;

    LPARAM lParam;

    DWORD time;

    POINT pt;

} MSG

hwnd – дескриптор окна, куда адресовано сообщение.

message – код сообщения. Приложение может использовать только младшее слово. Старшее слово зарезервировано системой.

wParam – дополнительная информация; зависит от типа сообщения.

lParam – дополнительная информация; зависит от типа сообщения.

time – время, когда сообщение было послано.

pt – координаты указателя мыши в момент, когда сообщение было послано. Младшее слово – Х, старшее – Y.

Процесс обработки сообщений в Windows:

 

Структура GUI -приложения. Регистрация класса окон.

Так как в GUI-приложении должно быть минимум одно окно, в структуре приложения можно выделить следующие блоки:

1) регистрация класса окон

2) создание главного окна

3) процедура главного окна

4) цикл обработки сообщений

Регистрация класса окон

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

Для регистрации используется API-функция RegisterClass, с одним параметром – адресом структуры, имеющей тип WNDCLASS:

ATOM RegisterClass(

    CONST WNDCLASS * lpWndClass

);

typedef struct _WNDCLASS {

UINT style;

WNDPROC lpfnWndProc;

int cbClsExtra;

int cbWndExtra;

HANDLE hInstance;

HICON hIcon;

HCURSOR hCursor;

HBRUSH hbrBackground;

LPCTSTR lpszMenuName;

LPCTSTR lpszClassName;

} WNDCLASS;

Style – стиль окна:перерисовывать окно при перемещении,деактивировать кнопку «Закрыть»,эффекты Windows XP и др.

lpfnWndProc – адрес процедуры обработки сообщений окна. Для всех окон данного класса объявляется одна процедура окна.Каждое окно при создании имеет собственный дескриптор. Часто для каждого окна создают свой класс.

cbClsExtra – количество дополнительных байт для класса. Должен быть равен нулю.

cbWndExtra – количество дополнительных байт для окна. Должен быть равен нулю.

hInstance – дескриптор приложения, которое содержит процедуру для данного класса.

hIcon – дескриптор пиктограммы окна. Если ноль, то по умолчанию.

hCursor – дескриптор курсора мыши. Если ноль, то по умолчанию.

hbrBackground – цвет окна.

lpszMenuName – имя ресурса, содержащего меню.

lpszClassName – адрес строки, содержащей имя класса.

 

GUI -приложения: создание главного окна, процедура окна.

Для создания окна используется функция CreateWindow:

HWND CreateWindow(

    LPCTSTR lpClassName,

    LPCTSTR lpWindowName,

    DWORD dwStyle,

    int x,

    int y,

    int nWidth,

    int nHeight,

    HWND hWndParent,

    HMENU hMenu,

    HINSTANCE hInstance,(=0)

    LPVOID lpParam

);

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

lpWindowName – адрес строки, где содержится имя создаваемого окна (отображается в заголовке).

dwStyle – стиль окна:

· WS_MAXIMIZE – развернутое окно

· WS_MINIMIZE – свернутое окно

· WS_CAPTION – есть заголовок

· WS_DISABLED – недоступное окно

· WS_SIZEBOX – окно с изменяемыми размерами

· WS_VISIBLE – видимое окно

x, y – координаты левого верхнего угла.

nWidth, nHeight – ширина и высота окна.

hWndParent – дескриптор родительского окна. Для главного окна = 0.

hMenu – дескриптор меню. Обычно равен нулю.

hInstance – дескриптор модуля, который ассоциирован с этим окном. В Windows NT/2000/XP игнорируется.

lpParam – адрес переменной, которая будет передана в окно.

Каждое окно имеет процедуру окна (window procedure) – функцию, которая обрабатывает все сообщения, передаваемые всем окнам данного класса. Процедура окна начинает работать сразу после создания окна.

Процедура окна должна иметь 4 параметра:

LRESULT CALLBACK WindowProc(     HWND hwnd,

    UINT uMsg,

    WPARAM wParam,

    LPARAM lParam

);

Hwnd – дескриптор окна (процедура одна на целый класс окон).

uMsg – число – идентификатор сообщения.

wParam, lParam – дополнительные параметры.

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

 


Поделиться с друзьями:

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.015 с.