怎么使用mfc画图板添加很多笔的粗细

怎么使用mfc画图板添加很多笔的粗细,第1张

调用GetWindowText函数获取用户输入的值。

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)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11613667.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存