【VC开源代码栏目提醒】:以下是网学会员为您推荐的VC开源代码-LineDDAView.cpp,希望本篇文章对您学习有所帮助。
// LineDDAView.cpp : implementation of the CLineDDAView class
//
#include "stdafx.h"
#include "LineDDA.h"
#include "LineDDADoc.h"
#include "LineDDAView.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
COLORREF g_crValue;
VOID CALLBACK Proc(int X, int Y, LPARAM lpData)
{
// 使用lpData传递用于绘图的CDC对象的引用
CDC* pDC;
pDC = (CDC*)lpData;
// 该回调函数将在线上每个点处被调用,因此随着X坐标的变化,纵坐标Y+sin(X)
// 也就呈正弦波形波动,通过CDC类的SetPixel函数将计算出的波浪线上的每一点
// 都显示出来。
pDC->SetPixel(X, Y + sin(X), g_crValue);
}
/////////////////////////////////////////////////////////////////////////////
// CLineDDAView
IMPLEMENT_DYNCREATE(CLineDDAView, CView)
BEGIN_MESSAGE_MAP(CLineDDAView, CView)
//{{AFX_MSG_MAP(CLineDDAView)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLineDDAView construction/destruction
CLineDDAView::CLineDDAView()
{
// TODO: add construction code here
}
CLineDDAView::~CLineDDAView()
{
}
BOOL CLineDDAView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CLineDDAView drawing
void CLineDDAView::OnDraw(CDC* pDC)
{
CLineDDADoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
DrawWave(CPoint(10, 50), CPoint(510, 50), RGB(0, 0, 255));
}
/////////////////////////////////////////////////////////////////////////////
// CLineDDAView printing
BOOL CLineDDAView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CLineDDAView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CLineDDAView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CLineDDAView diagnostics
#ifdef _DEBUG
void CLineDDAView::AssertValid() const
{
CView::AssertValid();
}
void CLineDDAView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CLineDDADoc* CLineDDAView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLineDDADoc)));
return (CLineDDADoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CLineDDAView message handlers
void CLineDDAView::DrawWave(CPoint ptFrom, CPoint ptTo, COLORREF crValue)
{
g_crValue = crValue; // 绘制图形用的颜色
CDC* pDC = GetDC(); // 获取当前设备环境句柄
// 通过LineDDA函数调用回调函数Proc以完成复杂线条的绘图
工作 LineDDA(ptFrom.x, ptFrom.y, ptTo.x, ptTo.y, (LINEDDAPROC)Proc, (long)pDC);
ReleaseDC(pDC); //释放申请到的设备环境句柄
}