FRACTALS

ѕ даРЪвРЫРе
іРЫХаХп ШЧЮСаРЦХЭШЩ даРЪвРЫЮТ
їаЮУаРЬЬл ФЫп ЯЮбваЮХЭШп даРЪвРЫЮТ
БблЫЪШ ЭР ФагУШХ бРЩвл Ю даРЪвРЫРе
ЅРЯШиШ бТЮШ ТЯХзРвЫХЭШп



 
 

LOGO
Предыдущая Следующая

Базовый класс twindow отвечает на сообщения Windows через

СВОЮ фуНКЦИЮ-ЧЛен handle_message. В Листинге В.2.1 Пред-

ставлен код этой функции. Функции, такие как respond_wm_j>aint, задают ответ на определенное сообщение Windows, в данном случае wm_paint. В twindow этот ответ не является функциональным. Однако в производных классах окна необходимо лишь переопределить отдельные функции ответа на сообщение. Во многих случаях нет необходимости

Переопределять Саму фуНКЦИЮ handle_message. Заметим, ЧТО

во многих случаях handie_message возвращает 0. Возвращение 0 в операционную систему Windows заставляет ее продолжить обработку сообщения, а ненулевое значение прекращает обработку сообщения. Обычно лучше всего позволить Windows продолжить обработку сообщения после того, как вы сами его обработали, поскольку может существовать функциональность, о которой вы не знаете (часть которой может быть введена в более поздних версиях Windows).

Как Сообщения попадают В функцию handle_message?

В Windows с каждым типом окна связана процедур3 (процедура обратного вызова). Это связывание возникает путем назначения адреса процедуры окну при его регистрации. Регистрация ОКНа ПРОИСХОДИТ В фунКЦИИ WinMain«

В идеальном случае нам хотелось бы назначить адрес функции-члена handle_message. Однако С++ Не ПОЗВОЛЯеТ назНа-

чать адреса функций-членов, так как этот адрес не известен до тех пор, пока определенный объект (экземпляр) класса не будет создан во время выполнения. Вот почему twindow име-

ложение В. Библиотека утилит Windows

269

ет функцию-член set_giobai^ptr. В производных классах окна эта функция-член переопределяется так, чтобы установить глобальный указатель на определенный экземпляр класса окна (с помощью указателя класса this). Этот глобальный указатель затем определяет конкретный экземпляр функции

handle_message, КОТОраЯ ВЫЗЫвавТСЯ ИЗ ГЛобаЛЬНОЙ функции,

чей адрес предоставляется Windows в качестве процедуры обратного вызова, связанной с этим типом окна.

стингВ.2.1. Функция-член handle_message класса twindow

LRESULT CALLBACK twindow::handle_message (HWND hwnd, UINT message, WPARAM wParam, LP ARAM lParam) { /* If "respond_..." procedure actually does


Предыдущая Следующая


Галерея фракталов

 

Hosted by uCoz