Платформа Win32 - Основные сообщения
Участников: 2
Страница 1 из 1
Платформа Win32 - Основные сообщения
Продолжаем разговор про окна Win32
Отлов сообщений
Сообщения, посылаемые окну, необходимо отловить в функции WndProc, а затем в блоке Select Case ... End Select, выбрать из wMsg тип сообщения:
hWnd As HWND — идентификатор окна, вызвавшего событие
wMsg As UINT — тип события
wParam As WPARAM, lParam As LPARAM — параметры события
События мыши
WM_MOUSEMOVE
Перемещение курсора мыши над окном
fwKeys = wParam — состояние кнопок;
xPos = LoWord(lParam) — координата X курсора мыши;
yPos = HiWord(lParam) — координата Y курсора мыши;
fwKeys — состояние кнопок, представляет комбинацию следующих значений
WM_LBUTTONDOWN
Нажатие левой кнопки мыши, параметры события аналогичные.
WM_LBUTTONUP
Отпускание левой кнопки мыши
WM_LBUTTONDBLCLK
Двойной щелчок левой кнопки мыши
WM_RBUTTONDOWN
Нажатие правой кнопки мыши
WM_RBUTTONUP
Отпускание правой кнопки мыши
WM_RBUTTONDBLCLK
Двойной щелчок правой кнопки мыши
WM_MBUTTONDOWN
Нажатие средней кнопки мыши
WM_MBUTTONUP
Отпускание средней кнопки мыши
WM_MBUTTONDBLCLK
Двойной щелчок средней кнопки мыши
WM_MOUSEHOVER
Нависание курсора мыши
WM_MOUSELEAVE
Курсор мыши покидает объект
События клавиатуры
WM_KEYDOWN
Нажатие клавиши
intVirtKey = wParam — код клавиши
WM_KEYUP
Отпускание клавиши
События окна
WM_CREATE
Сообщение WM_CREATE посылается при создании окна (функцией CreateWindowEx или CreateWindow), но до его появления на экране. Аналог события Form_Load в VisualBasic.
WM_CLOSE
Попытка закрытия окна. Можно спросить у пользователя, действительно ли он хочет закрыть окно, и, если вернуть 1, то закрытие окна можно отменить. Здесь можно располагать код очистки перед завершением программы.
WM_DESTROY
Разрушение окна. Для того, чтобы закончить цикл приёма сообщений, любое приложение обязано обработать это событие, например, так:
Перерисовка окна, происходит при перекрытии окна другим окном, сворачивании-разворачивании окна, изменении размера. При этом всё, чтобы было нарисовано и перекрыто в окне , стирается. Здесь можно вставить код отрисовки и обновления графики.
WM_SIZE
Изменение размера окна
Параметры:
intSizeType = wParam — флаг изменения размера;
intWidth = LoWord(lParam) — новая ширина клиентской части окна;
intHeight = HiWord(lParam) — новая высота клиентской части окна;
fwSizeType — комбинация следующих значений:
WM_SETTEXT
Установка текста окна
strNewWindowText = lParam — адрес нуль-конечной строки текста (ZString).
WM_GETTEXT
Запрос текста окна
intCharactersCount = WPARAM — число символов в тексте.
intBuffer = LPARAM — адрес буфера со строкой типа ZString.
Функция DefWindowProc копирует текст, связанный с окном в указанный буфер и возвращает скопированное число символов.
WM_GETTEXTLENGTH
Запрос длины текста окна, все параметры этого события зарезервированы.
WM_ACTIVATE[
Активирование или деактивирование окна.
fActive = LoWord(wParam) — флаги активации
intMinimized = HiWord(wParam) — если не равно нулю, то окно свёрнуто
hwnd = lParam — идентификатор окна, с которым происходит это событие, может быть пустым.
fActive может принимать следующие значения
WM_CHILDACTIVATE
Активация дочернего окна. Не имеет параметров.
WM_COMMAND
Пользователь выбирает пункт меню, нажимает "горячую" клавишу или событие посылает элемент управления. Необходимо чтобы обработать события от меню, кнопок, флажков и т.д.
wNotifyCode = HiWord(wParam) — код уведомления, если равен 1 — это сообщение вызвано "горячей" клавишей, если равен 0 — меню.
wID = LoWord(wParam) — идентификатор пункта меню, элемента управления или "горячей" клавиши.
hwndCtl = lParam — идентификатор элемента управления; если это сообщение послано не элементом управления, то здесь будет пустой идентификатор.
WM_CONTEXTMENU
Запрос контекстного меню (правым щелчком мыши). Это событие доступно для Windows NT.
hwnd = wParam — идентификатор элемента управления, в котором пользователь щёлкнул мышью
xPos = LoWord(lParam) — координата X курсора мыши;
yPos = HiWord(lParam) — координата Y курсора мыши;
WM_FONTCHANGE
Изменение шрифта по умолчанию для окна. Это событие не имеет параметорв.
WM_MOVE
Окно перемещено.
xPos = LoWord(lParam) — координата X нового положения окна;
yPos = HiWord(lParam) — координата Y нового положения окна;
WM_VSCROLL, WM_HSCROLL
Вертикальная или горизонтальная прокрутка окна.
intScrollCode = LoWord(wParam) — значение полосы прокрутки
intPos = HiWord(wParam) — позиция бегунка
hwndScrollBar = lParam — идентификатор полосы прокрутки.
IntScrollCode может принимать следующие значения
Отлов сообщений
Сообщения, посылаемые окну, необходимо отловить в функции WndProc, а затем в блоке Select Case ... End Select, выбрать из wMsg тип сообщения:
- Код:
Declare Function WndProc(ByVal hWnd As HWND, ByVal wMsg As UINT, ByVal wParam As WPARAM, ByVal lParam As LPARAM) As LRESULT
Function WndProc(ByVal hWnd As HWND, _
ByVal wMsg As UINT, _
ByVal wParam As WPARAM, _
ByVal lParam As LPARAM) As LRESULT
' Выбираем сообщение, которое мы получили
Select Case(wMsg)
' Обязательно обрабатываем следующие события
' иначе наша программа будет вести себя неправильно
Case WM_CLOSE
' Сообщение о закрытии окна
' Уничтожаем окно
DestroyWindow(hWnd)
Case WM_DESTROY
' Окно уничтожается
PostQuitMessage(0)
Return 0
Case Else
' Отправляем сообщение обработчику
' по умолчанию
Return DefWindowProc(hWnd, wMsg, wParam, lParam)
End Select
End Function
- Код:
#Include "windows.bi"
hWnd As HWND — идентификатор окна, вызвавшего событие
wMsg As UINT — тип события
wParam As WPARAM, lParam As LPARAM — параметры события
События мыши
WM_MOUSEMOVE
Перемещение курсора мыши над окном
fwKeys = wParam — состояние кнопок;
xPos = LoWord(lParam) — координата X курсора мыши;
yPos = HiWord(lParam) — координата Y курсора мыши;
fwKeys — состояние кнопок, представляет комбинацию следующих значений
MK_CONTROL | состояние клавиши Ctrl |
MK_LBUTTON | состояние левой кнопки мыши |
MK_MBUTTON | состояние средней кнопки мыши |
MK_RBUTTON | состояние правой кнопки мыши |
MK_SHIFT | состояние клавиши Shift |
Нажатие левой кнопки мыши, параметры события аналогичные.
WM_LBUTTONUP
Отпускание левой кнопки мыши
WM_LBUTTONDBLCLK
Двойной щелчок левой кнопки мыши
WM_RBUTTONDOWN
Нажатие правой кнопки мыши
WM_RBUTTONUP
Отпускание правой кнопки мыши
WM_RBUTTONDBLCLK
Двойной щелчок правой кнопки мыши
WM_MBUTTONDOWN
Нажатие средней кнопки мыши
WM_MBUTTONUP
Отпускание средней кнопки мыши
WM_MBUTTONDBLCLK
Двойной щелчок средней кнопки мыши
WM_MOUSEHOVER
Нависание курсора мыши
WM_MOUSELEAVE
Курсор мыши покидает объект
События клавиатуры
WM_KEYDOWN
Нажатие клавиши
intVirtKey = wParam — код клавиши
WM_KEYUP
Отпускание клавиши
События окна
WM_CREATE
Сообщение WM_CREATE посылается при создании окна (функцией CreateWindowEx или CreateWindow), но до его появления на экране. Аналог события Form_Load в VisualBasic.
WM_CLOSE
Попытка закрытия окна. Можно спросить у пользователя, действительно ли он хочет закрыть окно, и, если вернуть 1, то закрытие окна можно отменить. Здесь можно располагать код очистки перед завершением программы.
WM_DESTROY
Разрушение окна. Для того, чтобы закончить цикл приёма сообщений, любое приложение обязано обработать это событие, например, так:
- Код:
Case WM_DESTROY
' Окно уничтожается
' Завершаем цикл обработки сообщений
PostQuitMessage(0)
Return 0
Перерисовка окна, происходит при перекрытии окна другим окном, сворачивании-разворачивании окна, изменении размера. При этом всё, чтобы было нарисовано и перекрыто в окне , стирается. Здесь можно вставить код отрисовки и обновления графики.
WM_SIZE
Изменение размера окна
Параметры:
intSizeType = wParam — флаг изменения размера;
intWidth = LoWord(lParam) — новая ширина клиентской части окна;
intHeight = HiWord(lParam) — новая высота клиентской части окна;
fwSizeType — комбинация следующих значений:
SIZE_MAXHIDE | Сообщение посылают всем всплывающим окнам, когда некоторое другое окно развернуто. |
SIZE_MAXIMIZED | Окно развёрнуто на весь экран |
SIZE_MAXSHOW | Сообщение посылают всем всплывающим окнам, когда некоторое другое окно было восстановлено к его прежнему размеру. |
SIZE_MINIMIZED | Окно свёрнуто |
SIZE_RESTORED | Окно восстановлено из минимизированного или развёрнутого |
Установка текста окна
strNewWindowText = lParam — адрес нуль-конечной строки текста (ZString).
WM_GETTEXT
Запрос текста окна
intCharactersCount = WPARAM — число символов в тексте.
intBuffer = LPARAM — адрес буфера со строкой типа ZString.
Функция DefWindowProc копирует текст, связанный с окном в указанный буфер и возвращает скопированное число символов.
WM_GETTEXTLENGTH
Запрос длины текста окна, все параметры этого события зарезервированы.
WM_ACTIVATE[
Активирование или деактивирование окна.
fActive = LoWord(wParam) — флаги активации
intMinimized = HiWord(wParam) — если не равно нулю, то окно свёрнуто
hwnd = lParam — идентификатор окна, с которым происходит это событие, может быть пустым.
fActive может принимать следующие значения
WA_ACTIVE | Активация окна без мыши (например, клавиатурой или функцией SetActiveWindow) |
WA_CLICKACTIVE | Активация окна щелчком мыши |
WA_INACTIVE | Деактивация окна |
Активация дочернего окна. Не имеет параметров.
WM_COMMAND
Пользователь выбирает пункт меню, нажимает "горячую" клавишу или событие посылает элемент управления. Необходимо чтобы обработать события от меню, кнопок, флажков и т.д.
wNotifyCode = HiWord(wParam) — код уведомления, если равен 1 — это сообщение вызвано "горячей" клавишей, если равен 0 — меню.
wID = LoWord(wParam) — идентификатор пункта меню, элемента управления или "горячей" клавиши.
hwndCtl = lParam — идентификатор элемента управления; если это сообщение послано не элементом управления, то здесь будет пустой идентификатор.
WM_CONTEXTMENU
Запрос контекстного меню (правым щелчком мыши). Это событие доступно для Windows NT.
hwnd = wParam — идентификатор элемента управления, в котором пользователь щёлкнул мышью
xPos = LoWord(lParam) — координата X курсора мыши;
yPos = HiWord(lParam) — координата Y курсора мыши;
WM_FONTCHANGE
Изменение шрифта по умолчанию для окна. Это событие не имеет параметорв.
WM_MOVE
Окно перемещено.
xPos = LoWord(lParam) — координата X нового положения окна;
yPos = HiWord(lParam) — координата Y нового положения окна;
WM_VSCROLL, WM_HSCROLL
Вертикальная или горизонтальная прокрутка окна.
intScrollCode = LoWord(wParam) — значение полосы прокрутки
intPos = HiWord(wParam) — позиция бегунка
hwndScrollBar = lParam — идентификатор полосы прокрутки.
IntScrollCode может принимать следующие значения
SB_LINEDOWN | Прокрутка на линию вниз |
SB_LINEUP | Прокрутка на линию вверх |
SB_PAGEDOWN | Прокрутка на страницу вниз |
SB_PAGEUP | Прокрутка на страницу вверх |
SB_THUMBPOSITION | Прокрутка к абсолютной позиции. Текущая позиция определена nPos параметром. |
SB_THUMBTRACK | Перетаскивает бегунок к указанной позиции. Текущая позиция определена nPos параметром. |
Re: Платформа Win32 - Основные сообщения
Прикольно, давно хотел найти хоть какое нибудь описание виндовых сообщений, теперь буду знать где они есть))
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения