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

 

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

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

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 118 119 120 121 122 123 < 124 > 125 126 127 128 129 130 .. 173 >> Следующая

if (PDrawThread && PDrawThread->m_hThread != NULL) PDrawThread->ResumeThread ();
}
Листинг 22.7.
// MandelMTView.h : интерфейс класса CMandelMTView
//
111111II111111111111111111111111111111111111 III 111II11111111111111 III I #if !defined(
AFXJ4ANDELMTVIEW_3DD7B0ED_A9DC_11D1_80FC_00C0F6A83B7F_INCLUDED_)
¦define
AFX_MANDELMTVIEW_3DD7B0ED_A9DC_11D1_80FC_00C0F6A83B7F_INCLUDED_
#if _MSC_VER > 1000 ¦pragma once
¦endif // _MSC_VER > 1000
class CMandelMTView : public CView
{
public:
CWinThread *m_PDrawThread;
protected: // используются при сериализации CMandelMTView();
DECLARE_DYNCREATE(CMandelMTView)
// Атрибуты public:
CMandelMTDoc* GetDocument() ;
// Операции public:
/ / Переопределения
// Переопределения виртуальных функций, сгенерированные
// мастером ClassWizard
//((AFX_VIRTUAL(CMandelMTView)
public:
virtual void OnDraw(CDC* pDC); // переопределено для
// отображения окна представления virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
//}}AFX_VIRTUAL
// Реализация public:
virtual -CMandelMTView(); #ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContexts dc) const; #endif
protected:
// Сгенерированные функции схемы обработки сообщений
protected:
//((AFX_MSG(CMandelMTView)
afxmsg void OnSizefUINT nType, int cx, int cy); //}}AFX_MSG DECLARE_MESSAGE_MAP()
};
#ifndef _DEBUG // отладочная версия находится в файле MandelMTView.срр inline CMandelMTDoc* CMandelMTView::GetDocument()
( return (CMandelMTDoc*)m_pDocument; } #endif
11111111111111/1 III III 11111/11/11/III/1/1 III I/II III I/11 III I/III 111/11/ ll{(AFX_INSERT_LOCATION}}
// Visual С++ вставит дополнительные объявления // сразу перед предыдущей строкой
#endif
// !defined(
// AFX_ MANDELMTVIEW_3DD7B0ED_A9DC_11D1_80FC_00C0F6A83B7F_INCLUDED_)
Листинг 22.8.
// MandelMTView.срр : реализация класса CMandelMTView
//
¦include "stdafx.h" ¦include "MandelMT.h"
¦include "MandelMTDoc.h" ¦include "MandelMTView.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
// Глобальные переменные для связи между потоками : int ColMax; int RowMax; BOOL StopDraw;
1111II11111 III 11111/111111II1111111111111111111111II111 III 1111111111 /I Класс CMandelMTView
IMPLEMENT_DYNCREATE(CMandelMTView, CView)
BEGIN_MESSAGE_MAP(CMandelMTView, CView)
//{{AFX_MS G_MAP(CMandelMTView)
ON_WM_SIZE()
//))AFX_MSG_MAP END_MESSAGE_MAP()
11111111111111111111111111111111111111111111111111111111111111111111 II Конструктор/деструктор класса CMandelMTView
CMandelMTView::CMandelMTView() {
// TODO: здесь добавьте код конструктора m_PDrawThread = 0;
)
CMandelMTView::-CMandelMTView() (
delete m_PDrawThread;
)
BOOL CMandelMTView::PreCreateWindow(CREATESTRUCTS cs) (
// TODO: модифицируйте класс окна или стили окна, // изменяя поля структуры cs
return CView::PreCreateWindow(cs) ;
>
11111111111111111111111111111111111111111111111111111111111/111111 h II Отображение с использованием класса CMandelMTView
UINT DrawFractal (LPVOID PHWndView) (
float CI;
CClientDC ClientDC (CWnd::FromHandle (*(HWND *)PHWndView)) int Col;
static DWORD ColorTable [6] =
OxffOOff); // сиреневый int ColorVal; float CR = (float)CRMIN;
float DCI = (float)((CIMAX - CIMIN) / (RowMax-1));
float DCR = (float)((CRMAX - CRMIN) / (ColMax-1));
float I;
float ISqr;
float R;
int Row;
float RSqr;
for (Col = 0; Col < ColMax; ++Col)
if (StopDraw) break;
CI = (float)CIMAX;
for (Row = 0; Row < RowMax; ++Row) (
R = (float)0.0; I = (float)0.0; RSqr = (float)0.0; ISqr = (float)0.0; ColorVal = 0;
while (ColorVal < NMAX && RSqr + ISqr < 4) {
++ColorVal;
RSqr = R * R;
ISqr =1*1;
I *= R;
I += I + CI;
R = RSqr - ISqr + CR;
}
ClientDC.SetPixelV (Col, Row, ColorTable [ColorVal %
CI -= DCI;
)
CR += DCR;
(OxOOOOff, OxOOffOO, OxffOOOO, OxOOffff, OxffffOO,
// красный
// зеленый
// синий
// желтый
// бирюзовый
return (0);
void CMandelMTView::OnDraw(CDC* pDC) {
CMandelMTDoc* pDoc = GetDocument() ; ASSERT_VALID(pDoc);
// TODO: Здесь добавьте код отображения собственных данных
if (m_PDrawThread) {
StopDraw = TRUE; m_PDrawThread->ResumeThread () ; ::WaitForSingleObject
(m PDrawThread->m_hThread, // управление потоком рисования;
INFINITE); // ожидает столько, сколько нужно
delete m_PDrawThread; }
m_PDrawThread = AfxBeginThread (DrawFractal, &m_hWnd,
THREAD_PRIORITY_BELOW NORMAL, 0,
CREATE_SUS PENDED); m_PDrawThread->m_bAutoDelete = FALSE; StopDraw = FALSE; m PDrawThread->ResumeThread ();
II11/II1111111II1111111111111 III III III/IIIПIII 11111111111II11 III I III I II Диагностика класса CMandelMTView
#ifdef _DEBUG
void CMandelMTView::AssertValid() const {
CView::AssertValid();
)
void CMandelMTView::Dump(CDumpContextS dc) const (
CView::Dump(dc);
)
CMandelMTDoc* CMandelMTView::GetDocument() // неотладочная версия
Предыдущая << 1 .. 118 119 120 121 122 123 < 124 > 125 126 127 128 129 130 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100