Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia_3_slaydy_2012.doc
Скачиваний:
5
Добавлен:
18.08.2019
Размер:
376.32 Кб
Скачать

Оконная процедура

В оконной процедуре указывается код, который должен выполняться при получении окном приложения каких-либо сообщений. Наиболее часто используемое имя для оконной процедуры – это имя WndProc.

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

LRESULT CALLBACK WndProc(

HWND hwnd,

UINT uMsg,

WPARAM wParam,

LPARAM lParam

);

Функция возвращает значение типа LRESULT (в действительности это целое число типа long), сообщающее успешно или нет завершена работа функции. Идентификатор CALLBACK сообщает, что это функция обратного вызова (callback function). Это означает, что вызов данной функции осуществляют внутренние механизмы Windows.

В сигнатуре оконной процедуры указано четыре параметра:

  • hwnd — Идентифицирует окно, которому предназначено сообщение.

  • uMsg — Предопределенная константа, идентифицирующая конкретное сообщение. Например, сообщению о выходе из приложения соответствует константа WM_QUIT.

  • wParam — Дополнительная информация о сообщении. Зависит от конкретного сообщения.

  • lParam — Дополнительная информация о сообщении. Зависит от конкретного сообщения.

Стили окон

1) Перекрывающиеся окна чаще используют в качестве окон приложения. Базовый тип таких окон описывается константой WS_OVERLAPED или WS_OVERLAPEDWINDOW (окно имеет системное меню, кнопки восстановления размеров, закрытия и сворачивания окна).

Перекрывающееся окно может принадлежать другому окну (владельцу). Если окно-владелец сворачивается в пиктограмму, то подчинённые ему окна становятся невидимыми. При уничтожении окна автоматически уничтожаются подчинённые ему окна. Подчинённые окна всегда располагаются над поверхностью окна владельца.

2) Временные (всплывающие) окна обычно используют для вывода сообщений пользователю и остаются на экране непродолжительное время. Базовый стиль временного окна описывается константой WS_POPUP или WS_POPUPWINDOW. Для добавления к временному окну системного меню и заголовка стиль WS_POPUPWINDOW комбинируют со стилем WS_CAPTION (WS_POPUPWINDOW|WS_CAPTION). Во всём остальном временные окна – это специальный вид перекрывающихся окон.

3) Дочерние окна используют для создания органов управления. Определяемые системой классы органов управления (кнопки, полосы просмотра и т.д.) представляют собой дочерние окна. Базовый стиль дочерних окон описывается константой WS_CHILD или WS_CHILDWINDOW.

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

Всплывающие и дочерние окна различаются следующими основными характеристиками:

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

  2. дочерние окна могут перемещаться только в пределах родительского окна, в то время, как положение всплывающих окон не ограничено какими-либо границами;

  3. координаты дочерних окон задаются относительно границ рабочей области родительского окна; координаты всплывающих окон задаются относительно границ экрана;

  4. всплывающее окно может содержать собственное меню; в дочерних окнах меню не бывает.

Функции перемещения окон

1) Для перемещения и изменения размеров окна hwnd используют функцию MoveWindow. Ей передают новые координаты окна. Функция MoveWindow объявлена следующим образом:

BOOL MoveWindow(HWND hwnd,

int x, // новая координата левого края окна

int y, // новая координата верхнего края окна

int Width, // новая ширина окна

int nHeight, // новая высота окна

BOOL bRepaint); // флажок перекрашивания окна

Если bRepaint=TRUE, немедленно после перемещения перерисовываются те части экрана, на которых отразилось перемещение окна. Иначе окно перерисовывает себя только после обработки всех поступивших к моменту перемещения сообщений. При успешном выполнении функция возвращает ненулевое значение, иначе – нуль.

2) Функция SetWindowPos изменяет координаты окна hwnd на экране и его расположение по отношению к другим окнам:

BOOL SetWindowPos(HWND hwnd,

HWND hWndInsertAfter, // дескриптор порядка размещения

int x, // новая координата левого края

int y, // новая координата верхнего края

int cx, // новая ширина

int cy, // новая высота

UINT uFlags); // флажок позиционирования

Функция в случае успешного выполнения возвращает ненулевое значение. Параметр hWndInsertAfter может быть дескриптором предшествующего окна или равным одному из следующих значений:

Параметр uFlags может быть комбинацией значений из нижеследующей таблицы:

3) Вывести окно на передний план и передать его окну фокус ввода можно с помощью функции SetForegroundWindow.

Данная функция помещает поток, который создал заданное окно на передний план и активизирует это окно. Синтаксис этой функции следующий:

BOOL SetForegroundWindow(HWND hwnd);

В случае успешного перемещения функция возвращает ненулевое значение, иначе – нуль.

4) Системные метрики экрана и окна можно получить с помощью функции GetSystemMetrics. Данная функция возвращает метрики и текущие установки конфигурации системы. Метрики системы – это габариты (ширина и высота) отображаемых элементов Windows. Все габариты возвращаются в пикселях. Функция GetSystemMetrics объявлена следующим образом:

BOOL GetSystemMetrics(int nIndex);

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

Например, ширину экрана можно определить следующим образом:

int w=GetSystemMetrics(SM_CXSCREEN);

5) Для вывода текстовых сообщений и получения ответа пользователя применяют окно сообщения. Функция MessageBox создаёт, отображает, обеспечивает работу и закрывает окно сообщения:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]