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

TOP-10 программ
Symantec Norton Ghost 9.0
Partition Magic 8.0.2 Pro
Xilisoft 3GP Video Converter v3.1.7.0616b
Norton AntiVirus 2005
Xilisoft 3GP Video Converter v2.1.52.831b
Антивирус Касперского Personal 5.0.303 beta 2
RAR Password Cracker 4.12
ABBYY PDF Transformer v1.00.820
Windows Movie Maker 2.6
MP3 To Ringtone Gold v3.02
 
Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
 
 

   Программирование -> 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) - что текст нужно выводить в одну строку и центрировать по ширине и высоте.


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


 
Популярные книги

Общая информатика. Универсальный курс

Подробнее

Ремонт и обслуживание компьютера дома

Подробнее

Введение в ИТ Сервис-менеджмент

Подробнее


 
Новости ИТ
09.01.2009  Exeda -- корпоративный цифровой ассистент с Android Linux
09.01.2009  Правительство Вьетнама массово переходит на Open Source
09.01.2009  Windows 7 build 7000
09.01.2009  Silicon Power представила скоростную SDHC
09.01.2009  CES 2009: RealView 360 3D Desktop Scanner - настольный 3D-сканер, один из первых в мире
09.01.2009  W90 - очень быстрый мультимедийный ноутбук ASUS «Ultimate-уровня»
09.01.2009  CES 2009: SanDisk представила семейство G3 - самых быстрых SSD-накопителей на флэш-памяти MLC
09.01.2009  ZOTAC GeForce GTX 285 и GTX 285 AMP! Edition - 3D-ускорители для геймеров на новом GPU NVIDIA
09.01.2009  Net Applications: в декабре доли Firefox и Chrome росли за счет IE
09.01.2009  Imation говорит о «новом классе» SSD и первом в отрасли полном наборе для модернизации на основе SSD
09.01.2009  Маршрутизатор D-Link Xtreme N DIR-685 может играть роль NAS, сервера печати... и цифровой фоторамки
09.01.2009  Очень тонкая фотокамера Pentax Optio P70 имеет разрешение 12 Мп
09.01.2009  pureSilicon 1TB Nitro - первый в мире 2,5-дюймовый SSD объемом 1 ТБ
09.01.2009  Дебютировали мобильные GPU ATI Mobility Radeon HD 4000
09.01.2009  NVIDIA GeForce GTX 285 и GTX 295 представлены официально
09.01.2009  Scythe выпустила процессорный кулер Mugen 2
09.01.2009  Optio E70 - новая компактная камера Pentax начального уровня
09.01.2009  Новый iPhone получит четырехъядерный процессор?
09.01.2009  У загрузчика GRUB 2 появился новый движок для шрифтов
09.01.2009  xf86-video-ati 6.10.0 -- драйвер XOrg для карт AMD/ATI обновился
 
Полезно

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