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

Windows API

  Все выпуски  

Windows API


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


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

Рассылка № 11

Windows API. Урок 13. Рисование в окне - основы.

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

Г. Шилдт. Самоучитель C++.
Г. Шилдт. Самоучитель C++
Заказать на Озоне

Подробнее

Рассылки сайта progs.biz через subscribe.ru
Уроки по VB.NET
Уроки по Visual Basic.NET. Написание Windows-программ, создание собственных компонентов, примеры и исходники, работа с базами данных, создание веб-приложений, FAQ, и многое другое.

Windows API. Урок 13. Рисование в окне - основы

Для рисования в окне мы должны добавить в оконную процеддуру обработчик для сообщения Windows WM_PAINT. Обратите внимание, что все рисование происходит именно в обработчике WM_PAINT. Если нам надо нарисовать что-нибудь, например, по левой кнопке мыши, то все равно рисование надо делать не в обработчике WM_LBUTTONDOWN, а в WM_PAINT.

С точки зрения устройства Windows рисование происходит не на самом окне, а на некотором промежуточном слое, который присоединен к окну. Этот промежуточный слой называется контекстом устройства (device context). Т. е. сначала мы должны создать контекст устройства, присоединенный именно к нашему окну, а потом в этом контексте устройства рисовать.

Вот пример кода, рисующего прямоугольник:

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
    // Объявляем контекст устройства.
    HDC hdc;
    // Объявляем структуру для рисования.
    PAINTSTRUCT ps;
    switch (Message){
        case WM_PAINT:
            // Присоединяем контекст устройства к окну.
            hdc = BeginPaint(hwnd, &ps);
            // Рисуем прямоугольник.
            Rectangle(hdc, 10, 10, 40, 80);
            // Заканчиваем рисование.
            EndPaint(hwnd, &ps);
            break;
            ...

Как вы видите, для рисования мы объявили 2 переменные - hdc и ps. Последняя переменная имеет тип PAINTSTRUCT и нигде не используется, кроме как в вызовах 2 API-функций - BeginPaint и EndPaint. Эта структура у Microsoft плохо документирована - про многие ее поля в MSDN написано, что они зареpзервированны для работы Windows и все. Поэтому мы ничего с ней не делаем, кроме подстановки в качестве параметра с 2 указанные функции. В начале обработчика WM_PAINT мы вызываем BeginPaint, в конце - EndPaint. Основное предназначение BeginPaint - это присоединение контекста устройства к нашему окну (окно определяется первым параметром BeginPaint, а присоединенный контекст устройства - возвращаемым функцией значением).

После того, как мы получили контекст устройства, в нем можно рисовать. Мы рисуем просто прямоугольник. Это мы делаем путем вызова API-функции Rectangle. Обратите внимание, что первым параметром у этой функции идет контекст устройства hdc. Такой первый параметр имеют все функции для рисования. Конкретно для прямоугольника остальные 4 параметра - это координаты его двух противоположенных углов - левого верхнего и правого нижнего.

Наверх

PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка .NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru
Copyright Алексеев Игорь, 2002-2003
Copyright сайт progs.biz, 2002-2003
Распространение материалов без разрешения владельцев авторских прав запрещено.


BannerDrive.ru

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

В избранное