Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Программирование -> C/C++ -> Уроки программирования на C/C++ под Windows 95


Сообщения WM_CREATE, WM_DESTROY и WM_PAINT

WM_CREATE

Самое первое сообщение, которое получает оконная процедура - это WM_CREATE. Из названия этого сообщения видно, что оно посылается в момент создания окна (функцией CreateWindow). Наша первая оконная процедура никак не обрабатывает это сообщение, но обычно в более сложных программах при поступлении сообщения WM_CREATE происходит инициализация всевозможных переменных, данные которых должны сохраняться на протяжении всей жизни окна, выделение памяти и т.д.

WM_DESTROY

В противоположность WM_CREATE есть сообщение, которое поступает перед ликвидацией окна - это WM_DESTROY.
Сообщение WM_DESTROY посылается тогда, когда пользователь закрывает окно любым способом (кнопкой закрытия окна, с помощью пункта системного меню "Закрыть", с помощью нажатия [ALT]+[F4]).
При получении этого сообщения оконная процедура обычно освобождает память и "подготавливается" к уничтожению окна. В нашем случае, поскольку программа создает единственное окно, при его закрытии должна завершаться вся программа. Это делается с помощью вызова функции PostQuitMessage(0). Эта функция ставит в очередь программы сообщение WM_QUIT. Если Вы помните, функция GetMessage (в цикле обработки сообщений) при получении сообщения WM_QUIT возвращает 0, что заставляет прекратиться цикл. Таким образом завершается выполнение программы.

WM_PAINT

Это сообщение указывает оконной процедуре, что часть рабочей области окна (или все окно) требует перерисовки. Что это значит?
Сразу после создания окна вся его рабочая область требует перерисовки (часто еще говорят - становится недействительной (invalid)), поскольку программа еще ничего в этом окне не нарисовала. В нашей программе первое сообщение WM_PAINT появляется в результате выполнения функции UpdateWindow.
Когда пользователь изменяет размер окна, его рабочая область также становится недействительной. (Если Вы помните, при регистрации класса окна нашей программы использовались стили CS_HREDRAW и CS_VREDRAW - именно они заставляют Windows генерировать сообщение WM_PAINT при изменении размеров окна).
Когда окно минимизируется, а затем снова восстанавливается, то в Windows содержимое рабочей области не сохраняется, т.к. пришлось бы хранить слишком много данных. Вместо этого Windows делает недействительным все окно и оконная процедура получает сообщение WM_PAINT.
Если окна перекрываются, то та часть окна, которая скрыта под другими окнами также не сохраняется Windows. Позже, когда эта часть окна откроется, Windows пометит его как недействительное. Оконная процедура получит сообщение WM_PAINT для восстановления содержимого окна.
Обработка WM_PAINT чаще всего начинается с вызова функции BeginPaint:

     hdc=BeginPaint(hwnd, &ps);

и заканчивается вызовом EndPaint:

     EndPaint(hwnd, &ps);

Здесь hwnd - описатель окна, в котором будет выполняться рисование, ps - структура PAINSTRUCT, в которой содержится информация, которую оконная процедура может использовать для рисования. (В дальнейшем мы еще вернемся к этой структуре).
При вызове BeginPaint осуществляется обновление фона рабочей области (вспомните о поле hbrBackground в структуре WNDCLASSEX) и переменной hdc присваивается значение описателя так называемого контекста устройства. Контекст устройства описывает физическое устройство вывода информации. Это может быть не только дисплей, но и другие устройства - принтер, например. Используя контекст устройства Вы сможете рисовать только в рабочей области окна. Это очень удобно.
После окончания рисования нужно обязательно освободить контекст устройства. Это выполняется с помощью вызова функции EndPaint.

Кратко рассмотрим, как выполняется вывод текста в нашей программе.
Вызовом GetClientRect заполняется структура RECT (переменная r). Эта структура имеет поля left, top, right, bottom. Поля left и top всегда устанавливаются в 0, а right и bottom содержат соответственно ширину и высоту рабочей области окна.
Функция DrawText осуществляет вывод текста:

     DrawText(hdc,"Hello, Windows!!!",-1,&r,

              DT_SINGLELINE|DT_CENTER|DT_VCENTER);

Параметр hdc - описатель контекста устройства, следующий параметр - выводимая строка. Третий параметр установлен в -1, чтобы показать, что выводимая строка завершается нулем. Параметр r указывает координаты рисования, а флаги (DT_SINGLELINE|DT_CENTER|DT_VCENTER) - что текст нужно выводить в одну строку и центрировать по ширине и высоте.


[   ОГЛАВЛЕНИЕ   ]


 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.