Отправляет email-рассылки с помощью сервиса Sendsay

Windows API

  Все выпуски  

Windows API


Информационный Канал Subscribe.Ru


Windows API. Уроки с сайта http://progs.biz

Рассылка №3

Windows API. Урок 3. Разбор оконной процедуры.

Полные версии уроков (с картинками) можно найти по адресам:
Урок 3. Разбор оконной процедуры.

Д. Круглински и др. Программирование на Microsoft Visual C++ 6.0 для профессионалов
Д. Круглински, С. Уингоу, Дж. Шеферд. Программирование на Microsoft Visual C++ 6.0 для пофессионалов
Заказать на Озоне

Подробнее

Рассылки сайта progs.biz через subscribe.ru
Уроки по ассемблеру
Уроки по ассемблеру. Использование MASM, примеры, FAQ.

Windows API. Урок 3. Разбор оконной процедуры

На прошлом занятии мы с вами прошлись по функции WinMain. На этом уроке мы рассмотрим оконную процедуру.

Окнонная процедура у нас названа WndProc. Это название произвольное - в принципе мы могли назвать ее как угодно. Основное предназначение оконной процедуры - это обработка сообщений Windows. Например, вы нажимаете левую кнопку мыши и ваша программа получает сообщение Windows WM_LBUTTONDOWN. Вы изменяете размер окна и ваша программа получает сообщение WM_SIZE. Так вот, в оконной процедуре мы и обрабатываем сообщения Windows. Для этого мы пишем большой (как правило) switch, внутри которого пишем несколько case'ов. Если мы хотим, например, чтобы наша программа обращала внимание на изменение размера окна, то мы должны написать

switch (Message)
{
 ...
case WM_SIZE:
    //Обработчик сообщения WM_SIZE.
    ...

Если же мы такого не напишем, то наша программа никак реагировать на изменение размеров окна не будет. При этом соответствующее сообщение Windows программа все равно получит.

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

Обратите внимание на ветку default:

        ...
    default:
        return DefWindowProc(hwnd, Message, wparam, lparam);
        ...

Тут мы вызываем API-функцию DefWindowProc. Основное предназначение этой API-функции - это обработка сообщений Windows, которые не обрабатываются в нашей программе (т. е. тех, для которых нет своего case). При этом ничего особенно это функция не делает, но очередь из сообщений при этом двигается. И это самое важное - если у нас не было обработчика по умолчанию, то сообщения, не обрабатываемые нашей программой, забили бы очередь, и она бы встала - и даже те сообщения, для которых есть обработчики, никогда бы не были обработаны. Таким образом, основное предназначение функции DefWindowProc - это обработка ("проглатываение") тех сообщений, которые не обрабатываются с каком-нибудь case'е.

В оконную процедуру передаются 4 параметра:

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
    ...

Первый из этих параметров - это окно, в которое мы передаем сообщение Windows. Второй - это само сообщение. Третий и четвертый параметры - это дополнительные параметры для конкретного сообщения. Эти параметры будет разными для разных сообщений (и для некотрых сообщений Windows могут вообще не использоваться). Например, для сообщения WM_LBUTTONDOWN в дополнительных параметрах передаваются x и y той точки, в которой мы щелкнули, информация и том, были ли при этом нажати кнопки shift, atl и ctrl и другое, для сообщения WM_SIZE - новые размеры окна и т. д.. Еще обратите внимание, что эти же параметры у нас передаются в функцию DefWindowProc. Конкретно, что означают эти параметры для некоторого сообщения Windows, надо смотреть в справке по этому сообщению.

Наверх

Copyright Алексеев Игорь, 2003
Copyright сайт progs.biz, 2003
Распространение материалов без разрешения владельцев авторских прав запрещено.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное