Шаг 12 - Учим рисовать CPaintDC

Создание проекта

Наш проект жив, здоров, а чего ему будет. Хороший проект. Теперь мы попробуем создать свой CPaintDC, ведь он умеет рисовать далеко не все, крест например !

Создаем код

Создаем свой класс от CPaintDC:

class CMyPaintDC: public CPaintDC
{
public:
	CMyPaintDC(CWnd* pWnd);			// конструктор
	void DrawCross(int iPosX, int iPosY);	// функция рисования креста
};

И реализацию конечно:

CMyPaintDC::CMyPaintDC(CWnd* pWnd)
	:CPaintDC(pWnd)	// мы дети CPainDC
{
}

void CMyPaintDC::DrawCross(int iPosX, int iPosY)// для создания своей фигуры используем
{	// функции CPaintDC
	MoveTo(iPosX-50,iPosY);
	LineTo(iPosX+50,iPosY);
	MoveTo(iPosX,iPosY-50);
	LineTo(iPosX,iPosY+50);
}

Пробуем:

void CMainWnd::OnPaint()
{
	CMyPaintDC dc(this);	// наш класс 
	CPen MyPen(PS_DASHDOT,1,RGB(0,255,0));	// настраиваем перо
	dc.SelectObject(MyPen);	// выбираем перо
	for (int x=1;x<400;x=x+50)
	{
		dc.DrawCross(100+x,100+x);	// наша функция
	}
}

Запускаем программу и смотрим результат.

12_1.gif (3349 b)

Описание

Примененный подход должен быть до боли знаком. Вспомним.

// кнопка
class CMyButton: public CButton
{
	......
}
//  рамка окна
class CMainWnd : public CFrameWnd
{
	......
};

Обратите внимание на реализацию конструктора. Нам его не нужно переделывать, и поэтому сразу при создании вызываем конструктор папы и передаем ему параметры. Откуда я взял параметры в конструктор CMyPaintDC? От CPaintDC - написал, навел курсор и нажал F1. Хорошая кнопка помогает часто!

Позволю себе остановиться на поиске помощи.

ВЕРСИЯ 5.0
Видите бинокль в проекте ? Нажмите на него левой кнопкой мышки. Появится диалоговое окно с вкладками Index и Query. В Index введите, ну там строка для ввода всего одна, наш CPaintDC и внизу будут темы. Про конструктор это CPaintDC::CPaintDC, щелкните мышкой по нему. Оттуда параметры я и взял. А вот в Query вы найдете все страницы HTML помощи где упоминается введенное вами слово, после нажатия кнопки. Что за кнопка догадаетесь.

ВЕРСИЯ 6.0
Действуем аналогично, нажимаем на бинокль. Запустится MSDN Library, в которой вы можете произвести поиск нужного раздела справки. Либо по указателю, а если там не найдете, то в поиске, который просмотрит все документы и найдет все места где данное слово находится.

12_2.gif (1385 b)

Далее в методе OnPaint() рисуем. Но не просто, а создаем сначала перо. CPen - это перо. Мы все делаем с параметрами - тип, толщина, цвет. PS_DASHDOT - это пунктир. И методом SelectObject() указываем, что рисовать именно им. Рисуем кресты по диагонали.

Запускайте, компилируйте. Кресты, зеленые, по диагонали. Круто! Красиво!

Шпаргалка

Создайте наследника от CPaindDC:

class CMyPaintDC: public CPaintDC
......

Создайте свои функции рисования:

class CMyPaintDC: public CPaintDC
{
	......
	void DrawCross(int iPosX, int iPosY);
}

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 05.09.99 (обновлено 28.06.2001)