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

Уроки по Visual C++ (MFC, платформа .NET)


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

Visual C++.NET. MFC. Уроки по программированию с сайта http://progs.biz

Рассылка №55

Visual C++.NET. MFC. Урок 7. Класс CDC - обзор.
Visual C++.NET. MFC. Урок 8. Рисуем по всему окну (класс CWindowDC).

Полные версии уроков (с картинками) можно найти по адресам:
Урок 7. Класс CDC - обзор.
Урок 8. Рисуем по всему окну (класс CWindowDC).

Олафсен Ю., Скрайбнер К., Уайт К. Д. и др. Visual C++ 6 и MFC. Энциклопедия программиста
Олафсен Ю., Скрайбнер К., Уайт К. Д. и др. Visual C++ 6 и MFC. Энциклопедия программиста
Заказать на Озоне

Рассылки сайта progs.biz через Subscribe.Ru:

Уроки по VB.NET.

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

Visual C++.NET. Урок 7. Класс CDC - обзор

Класс CDC - это базовый класс для остальных классов контекстов устройств. И классы контекстов устройств большую часть своей функциональности берут именно из него.

Класс CDC универсален и представляет из себя универсальное устройство для рисования. Оно годится и для вывода графики и на экран, и на принтер, и т. п.

Класс CDC содержит больщое число методов (несколько десятков). Тематически они делятся на следующие категории:

  • Методы рисования линий (LineTo, MoveTo, Polyline и др.)
  • Методы рисования замкнутых фигур (Ellipse, Rectangle, Polyline и др.)
  • Методы работы с битмапами (BitBlt, GetPixel, SetPixel и др.)
  • Методы работы с текстом (TextOut, DrawText, и др.)
  • Методы по выбору кисти, пера и т. п. (SelectObject и SelectStockObject)
  • Методы по установке атрибутов (GetBkColor, SetBkColor, GetTextColor, SetTextColor и др.)
  • Конструкторы и методы инициализации (CDC, CreateCompatibleDC и др.)
  • Методы для печати
  • Другие методы
Наверх

Visual C++.NET. Урок 8. Рисуем по всему окну (класс CWindowDC)

Область окна можно условно разделить на две части - это внутренность окна (так называемая клиентская часть) и рамка окна (куда входит собственно рамка, заголовок, строка состояния, строка меню и др.).

Как нарисовать некоторый примитив в клиентский части окна мы рассматривали в уроке 5. Сейчас мы посмотрим, как можно рисовать по всему окну.

Для рисования по всему окну применяется класс CWindowDC. Он является потомком класса CDC. В своем конструкторе этот класс вызывает API-функцию CWindowDC, которая возвращает контекст устройства для всего окна. В своем деструкторе же этот класс вызывает API-функцию ReleaseDC.

Давайте нарисуем кружок в заголовке окна About нашей программы. Этот кружок будет появлятся при нажатии на кнопку. Добавьте эту кнопку в диалоговое окно About. В обработчике для кнопки напишите следующие код:

void CAboutDlg::OnBnClickedButton1()
{
    // TODO: Add your control notification handler code here
    //Берем все окно.
    CWindowDC dc(this);
    //Рисуем кружок.
    dc.Ellipse(0, 0, 20, 20);
}

Теперь при нажатии на кнопке в диалоговом окне About в заголовке появится белый кружок.

В приведенном примере мы в конструктор класса CWindowDC передаем указатель на все окно this.

Для того, чтобы посмотреть, что в конструкторе дйествительно происходит вызов API-функции GetWindowDC, поставьте точку останова на строке

    ...
    CWindowDC dc(this);
    ...

и запустите программу по F5. Когда вы остановитесь на этой строке, то для захода в конструктор нажмите F11. Вы окажетесь в следующем коде из библиотеки MFC:

CWindowDC::CWindowDC(CWnd* pWnd)
{
 ASSERT(pWnd == NULL || ::IsWindow(pWnd->m_hWnd));

 if (!Attach(::GetWindowDC(m_hWnd = pWnd->GetSafeHwnd())))
  AfxThrowResourceException();
}

Видите? Тут мы как раз и вызываем API-функцию GetWindowDC. Кстати, чуть пониже в коде видно, что в деструкторе вызывается API-функция ReleaseDC:

CWindowDC::~CWindowDC()
{
 ASSERT(m_hDC != NULL);
 ::ReleaseDC(m_hWnd, Detach());
}
Наверх

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


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

В избранное