Рисование в DC. Как избежать ошибок.
ОГЛАВЛЕНИЕ
Страница 1 из 2
Данная статья не может претендовать на полноту раскрытия принципов рисования в среде Microsoft Windows, она создана в помощь тем, кто делает свои первые шаги в этой области, с целью обратить внимание на основные моменты и предотвратить возможные (наиболее часто встречающиеся) ошибки. Примеры кода будут представлены в двух вариантах: с использованием WinAPI и MFC. 1. Получение DC (Контекста устройства)
Рисование в Windows осуществляется в контексте устройства (DC). Существуют 4 типа DC: Display, Printer, Memory (Compatible DC) и Information. Первые 3 используются для рисования, Information DC – для получения информации об устройстве. В данной статье будет рассматриваться Display DC (обращение с Memory DC будет рассмотрено в следующей статье, которая сейчас в подготовке), а обращение с Printer DC – большая отдельная тема, которую может быть кто-нибудь из участников осветит здесь на форуме. :)Итак, нам требуется в некотором окне нарисовать нечто свое собственное, картинку, график, текст и т.д. Первым делом необходимо получить контекст для рисования. Для этого в WinAPI применяются следующие методы:
WinAPI
// Получить DC клиентской области окна по его хэндлуВ MFC классом «оберткой» для DC служит класс CDC. Для получения объекта CDC какого либо окна, в классе CWnd существуют следующие методы:
HDC GetDC(HWND hWnd);
// Получить DC всего окна (включая его заголовок, меню, скроллбары и т.д.) по его хэндлу
HDC GetWindowDC (HWND hWnd);
// Освободить DC, ранее полученный по GetDC или GetWindowDC
int ReleaseDC (HWND hWnd, HDC hDC);
MFC
// Получить DC клиентской области окнаИз приведенных методов получения DC наиболее часто используется GetDC, т.к. обычно рисование происходит в клиентской части.
CDC *CWnd:: GetDC ();
// Получить DC всего окна (включая его заголовок, меню, скроллбары и т.д.)
CDC *CWnd:: GetWindowDC ();
// Освободить DC, ранее полученный по GetDC или GetWindowDC
int CWnd:: ReleaseDC (HWND hWnd, HDC hDC);