Платформа Win32 - Основные сообщения

Предыдущая тема Следующая тема Перейти вниз

Платформа Win32 - Основные сообщения

Сообщение  Замабувараев в Чт Сен 25, 2008 2:40 pm

Продолжаем разговор про окна Win32
Отлов сообщений
Сообщения, посылаемые окну, необходимо отловить в функции 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"
Функции WndProc передаются параметры:
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_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
Разрушение окна. Для того, чтобы закончить цикл приёма сообщений, любое приложение обязано обработать это событие, например, так:
Код:
Case WM_DESTROY
    ' Окно уничтожается
    ' Завершаем цикл обработки сообщений
    PostQuitMessage(0)
    Return 0
WM_PAINT
Перерисовка окна, происходит при перекрытии окна другим окном, сворачивании-разворачивании окна, изменении размера. При этом всё, чтобы было нарисовано и перекрыто в окне , стирается. Здесь можно вставить код отрисовки и обновления графики.
WM_SIZE
Изменение размера окна
Параметры:
intSizeType = wParam — флаг изменения размера;
intWidth = LoWord(lParam) — новая ширина клиентской части окна;
intHeight = HiWord(lParam) — новая высота клиентской части окна;
fwSizeType — комбинация следующих значений:
SIZE_MAXHIDEСообщение посылают всем всплывающим окнам, когда некоторое другое окно развернуто.
SIZE_MAXIMIZEDОкно развёрнуто на весь экран
SIZE_MAXSHOWСообщение посылают всем всплывающим окнам, когда некоторое другое окно было восстановлено к его прежнему размеру.
SIZE_MINIMIZEDОкно свёрнуто
SIZE_RESTOREDОкно восстановлено из минимизированного или развёрнутого
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 может принимать следующие значения
WA_ACTIVEАктивация окна без мыши (например, клавиатурой или функцией SetActiveWindow)
WA_CLICKACTIVEАктивация окна щелчком мыши
WA_INACTIVEДеактивация окна
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 может принимать следующие значения
SB_LINEDOWNПрокрутка на линию вниз
SB_LINEUPПрокрутка на линию вверх
SB_PAGEDOWNПрокрутка на страницу вниз
SB_PAGEUPПрокрутка на страницу вверх
SB_THUMBPOSITIONПрокрутка к абсолютной позиции. Текущая позиция определена nPos параметром.
SB_THUMBTRACKПеретаскивает бегунок к указанной позиции. Текущая позиция определена nPos параметром.
avatar
Замабувараев

Сообщения : 99
Дата регистрации : 2008-08-20
Возраст : 33
Откуда : Красноярск

Посмотреть профиль http://www.freebasic.su

Вернуться к началу Перейти вниз

Re: Платформа Win32 - Основные сообщения

Сообщение  tux в Чт Сен 25, 2008 4:59 pm

Прикольно, давно хотел найти хоть какое нибудь описание виндовых сообщений, теперь буду знать где они есть))
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения