软件应用基础
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)通过设置对话框,可以在程序中由用户设置画笔的类型、宽度