软件应用基础

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验内容:完成一个画图板项目,实现画点、线、矩形、椭圆,并设置线宽、线型、颜色。实验步骤:

1)新建MFC AppWizard工程,取名Graphic,单文档对话框

2)在菜单栏,新建一个子菜单,取名“绘图”,在该子菜单下,新建4个菜单项,分别取

名“点”、“线”、“矩形”、“椭圆”,ID分别IDM_DOT、IDM_LINE、IDM_RECTANGLE、IDM_ELLIPSE

3)为这4个菜单项,在View类中,添加相应命令

4)在View类头文件中,添加一个变量,用于保存用户的选择

UINT m_nDrawType;

并在构造函数中初始化

CGraphicView::CGraphicView()

{

// TODO: add construction code here

m_nDrawType=0;

}

5)在View类中,为四个菜单项添加消息响应函数

void CGraphicView::OnDot()

{

m_nDrawType=1;

}

void CGraphicView::OnLine()

{

m_nDrawType=2;

}

void CGraphicView::OnRectangle()

{

m_nDrawType=3;

}

void CGraphicView::OnEllipse()

{

m_nDrawType=4;

}

6)在View类中,增加鼠标左键按下和左键抬起的消息相应函数

void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point)

{

CView::OnLButtonDown(nFlags, point);

}

void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point)

{

CView::OnLButtonUp(nFlags, point);

}

7)在View类中增加一个成员变量,用于保存鼠标左键点击的位置

CPoint m_ptOrigin;

并在View类构造函数中初始化

CGraphicView::CGraphicView()

{

// TODO: add construction code here

m_nDrawType=0;

m_ptOrigin=0;

}

8)在CGraphicView::OnLButtonDown中,保存鼠标左键点击位置void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point) {

// TODO: Add your message handler code here and/or call default m_ptOrigin=point;

CView::OnLButtonDown(nFlags, point);

}

9)在CGraphicView::OnLButtonUp中,作图

void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default CClientDC dc(this);

switch(m_nDrawType)

{

case 1:

dc.SetPixel(point, RGB(255,0,0) );

break;

case 2:

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

break;

case 3:

dc.Rectangle(CRect(m_ptOrigin,point));

break;

case 4:

dc.Ellipse(CRect(m_ptOrigin,point));

break;

}

CView::OnLButtonUp(nFlags, point);

}

此时,已经可以实现,通过选择不同的菜单项,在视图类中画不同的图形

10)改变系统画笔颜色为红色,以及改变系统画刷为透明,透明画刷使得所有画图的线都可

以被看到

void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CClientDC dc(this);

CPen pen(PS_SOLID,1,RGB(255,0,0) ); //新代码

dc.SelectObject(&pen); //新代码

CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

//新代码

dc.SelectObject(pBrush); //新代码

switch(m_nDrawType)

{

case 1:

dc.SetPixel(point, RGB(255,0,0) );

break;

case 2:

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

break;

case 3:

dc.Rectangle(CRect(m_ptOrigin,point));

break;

case 4:

dc.Ellipse(CRect(m_ptOrigin,point));

break;

}

CView::OnLButtonUp(nFlags, point);

}

11)通过设置对话框,可以在程序中由用户设置画笔的类型、宽度

相关文档
最新文档