Наш проект жив, здоров, а чего ему будет. Хороший проект. Теперь мы попробуем создать свой 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); // наша функция } }
Запускаем программу и смотрим результат.
Примененный подход должен быть до боли знаком. Вспомним.
// кнопка 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, в которой вы можете произвести поиск нужного раздела справки. Либо по указателю, а если там не найдете, то в поиске, который просмотрит все документы и найдет все места где данное слово находится.
Далее в методе OnPaint() рисуем. Но не просто, а создаем сначала перо. CPen - это перо. Мы все делаем с параметрами - тип, толщина, цвет. PS_DASHDOT - это пунктир. И методом SelectObject() указываем, что рисовать именно им. Рисуем кресты по диагонали.
Запускайте, компилируйте. Кресты, зеленые, по диагонали. Круто! Красиво!
Создайте наследника от CPaindDC:
class CMyPaintDC: public CPaintDC ......
Создайте свои функции рисования:
class CMyPaintDC: public CPaintDC { ...... void DrawCross(int iPosX, int iPosY); }