1.实现设置画笔属性,选择画笔粗细的功能。2.实现颜色选择功能。3.实现油漆桶填充功能。4.实现画直线和铅笔画功能.5.实现特殊形状绘制。
你先定义一个线段类CLine,在其头文件中定义pt1和pt2,并定义一个成员函数DrawLine(),代码如下:class CLine : public CObject
{
private:
CPoint pt1
CPoint pt2
public:
CLine(CPoint p1, CPoint p2)
virtual ~CLine()
void DrawLine(CDC *pDC)
}
在实现文件Line.cpp中编写如下代码:
CLine::CLine(CPoint p1, CPoint p2)
{
pt1=p1
pt2=p2
}
void CLine::DrawLine(CDC *pDC)
{
pDC->MoveTo(pt1)
pDC->LineTo(pt2)
}
要使用一个动态数组来保存已画好的线段,为此在文档类C***Doc的头文件中定义下面的成员变量和成员函数,并包含定义类Line的头文件:
#include "Line.h"
#include <afxtempl.h> //使用MFC类模板
class C***Doc : public CDocument
{
……
protected:
CTypedPtrArray<CObArray,CLine *>m_LineArray //存放线段对象指针的动态数组
public:
CLine * GetLine(int nIndex)
void AddLine(CPoint p1, CPoint p2)
int GetNumLines()
……
}
在实现源文件***Doc.cpp中编写如下代码:
void C***Doc::AddLine(CPoint p1, CPoint p2)
{
CLine *pLine=new CLine(p1, p2)
m_LineArray.Add(pLine)
}
CLine *C***Doc::GetLine(int nIndex)
{
if(nIndex<0 || nIndex>m_LineArray.GetUpperBound())
return NULL
return m_LineArray.GetAt(nIndex)
}
int C***Doc::GetNumLines()
{
return m_LineArray.GetSize()
}
在WM_MOUSEMOVE消息处理函数OnMouseMove()中还要加入以下代码:
void C***View::OnMouseMove(UINT nFlags, CPoint point)
{
if(fg)
{
C***Doc *pDoc=GetDocument()
ASSERT_VALID(pDoc)
pDoc->AddLine(m_ptOrigin,point)
//其中m_ptOrigin是你在C***View中定义的起始点坐标
……
}
}
最后在OnDraw()函数中实现重绘:
void C***View::OnDraw(CDC* pDC)
{
CMyDrawDoc* pDoc = GetDocument()
ASSERT_VALID(pDoc)
// TODO: add draw code for native data here
int nIndex=pDoc->GetNumLines()
while(nIndex--)
{
pDoc->GetLine(nIndex)->DrawLine(pDC)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)