Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том2)" -> 66

Visual С++ 6. Полное руководство: В 2 т.(том2) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 60 61 62 63 64 65 < 66 > 67 68 69 70 71 72 .. 173 >> Следующая

// { {AFX_INSERT_LOCATION} }
// Microsoft Visual C++ вставит дополнительные объявления // сразу перед предыдущей строкой
#endif
// !defined(AFX_MANDELVIEW_H_A3F5D26D_A63C_11D1_80FC_00C0F6A83B7F_INCLUDED_)
Листинг 19.8
// MandView.cpp : реализация класса CMandelView
#include "stdafx.h" #include "Mandel.h"
#include "MandelDoc.h" #include "Mandelview.h"
#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE
static char THIS_FILE[] = _FILE
#endif
// определение набора констант Мандельброта:
#define CIMAX 1.2
#define CIMIN -1.2
#define CRMAX 1.0
#define CRMIN -2.0
#define NMAX 128
// Цвета, используемые для создания узора Мандельброта: DWORD ColorTable [б] = {OxOOOOff, // красный
OxOOffOO, // зеленый
OxffOOOO, // синий
OxOOffff, // желтый
OxffffOO, // голубой
OxffOOff}; // пурпурный
II11111II111111111 III 11111111111111111111111111111111111111111111111111 II Класс CMandelView
IMPLEMENTEDYNCREATE(CMande1Vi ew, CVi ew)
BEGIN_MESSAGE_MAP(CMandelView, CView) //{{AFX_MSG_MAP(CMandelView) ON_WM_SIZE() //) }AFX_MSG_MAP
END MESSAGE MAP()
1111111111111111111111 /111 /111 /111111 /1 /11111 /111 /111111 /1//1111
II Конструктор/деструктор класса CMandelView
CMandelView::CMandelView() {
// TODO: Здесь добавьте код конструктора m_Col = 0;
)
CMandelView: : -CMandelView ()
{
}
BOOL CMandelView::PreCreateWindow(CREATESTRUCT& cs) {
// TODO: Модифицируйте класс окна или стиль окна, // изменяя поля структуры cs
return CView::PreCreateWindow(cs);
}
1111111111111111111111111111111111111111111111111111111111111111 II Отображение окна класса CMandelView
void CMandelView::OnDraw(CDC* pDC) {
CMandelDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc};
// TODO: здесь добавьте код отображения собственных данных m_Col = 0;
m_CR = (float)CRMIN;
}
1111111111111111111111111111111111111111111111111111111111111111 II Диагностика класса CMandelView
#ifdef _DEBUG
void CMandelView::AssertValid() const {
CView::AssertValid();
}
void CMandelView::Dump(CDumpContextS dc) const {
CView::Dump(dc);
}
CMandelDoc* CMandelView::GetDocument() // неотладочная версия
// является встроенной
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMandelDoc)));
return (CMandelDoc*)m_pDocument;
}
#endif //_DEBUG
I! I/11111 /1111 / ПI! 11 i 1111 / I i ! i i 11 /1 /111 /1 / /111111 i I ' i 111 i ' 111 /1111111 // Обработчики сообщений класса CMandelView
void CMandelView::OnSize(UINT nType, int cx, int cy)
CView: :OnSize(nType, cx, cy! ;
// TODO: Здесь добавьте собственный код обработчика
if (cx <= 1 ! i су <= 1) return;
m_CclMax = cx; m RowMax =-- cy;
re^DCR - (float)((CRMAX - CRMIK) / (m_ColMax-l));
m_DCI = (float)({CIMftX - CIMTO) / (m_RowMax-l));
void CMandelView::DrawCol ()
\
CClientDC CiientDC (this);
float CI;
int ColorVai;
float I;
float ISqr;
float R;
int Sow;
float RSqr;
if (m_Col >= m__ColMax || Get Parent Frame ()->IsIconic ()) return;
CI = (f loat.) CIMAX;
for (P.ow = 0; Row < m_RowMax; -f+Row)
R « (float)0.0; I = (float)0.0; RSqr = (float10.0; ISqr = (float)0.0; ColorVai = 0;
while (ColorVai < NMAX && RSqr + ISqr < 4) {
++Colc;:Val; RSqr = R * R; ISqr =1 * I; I R; I += I + CI;
R = RSqr - ISqr + m_CR; }
ClientDC.SetPixelV (m_Col, Row, ColorTable [ColorVai % 6] ) ;
CI -= m_DCI;
)
m_Col++;
m СР. += ra DCR;
Рисование прямых и кривых линий
В этом параграфе вы узнаете, как рисуются прямые линии, их наборы, регулярные линии, являющиеся частями эллипсов, и лекала. Будут рассмотрены режимы рисования фона, влияющие на прямые и кривые линии.
Прямые линии
Чтобы нарисовать прямую линию, вызовите функцию CDC: :MoveTo для описания начальной точки линии, а затем - CDC::LineTo для описания конечной точки и генерации самой линии. Например, следующий фрагмент программы рисует линию от точки (5, 15) до точки (25,40).
pDC->MoveTo ',5, 15) ; pDC->MoveTo (25, 40);
Параметры, передаваемые в функцию MoveTo, описывают горизонтальные и вертикальные координаты новой текущей позиции. Функция LineTo рисует линию из текущей позиции до конечной точки, заданной переданными в нее параметрами. Функция LineTo также изменяет текущую позицию, чтобы задать конечную точку. Таким образом, при рисовании последовательности соединенных между собой линий, необходимо вызвать функцию MoveTo только перед первым вызовом функции LineTo. Например, следующий фрагмент программы рисует последовательность соединенных линий, формирующих букву "W".
pDc->MoveTo (50, 50);
pDc->LineTo (100, 150);
pDc->LineTo (150, 100);
pDc->LineTo (200, 150);
pDc->LineTo (250, 50);
Примечание
Если объект контекста устройства создается впервые, то текущая позиция имеет логические координаты (0, 0).
При другом способе рисования последовательно соединенных линий используется вызов функции с DC: : Polyline. Например, следующий фрагмент программы рисует такую же последовательность соединенных линий, как в предыдущем примере.
POINT Points [5]
Points [0] .X = 50;
Points [0] •У 50;
Предыдущая << 1 .. 60 61 62 63 64 65 < 66 > 67 68 69 70 71 72 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100