MFC中图形绘制(一)

      打开VC6.0,使用MFC AppWizard[exe]新建一个单文档的应用程序。

1)新建一个绘图菜单。打开ResourceView选项卡--》Menu/IDR_MAINFRAME-->双击菜单栏上的空白处,添加如下内容:

   

                                     图(1)具有弹出项的菜单

图(2)菜单项“点”

     还有两个菜单项:ID: IDM_RECTANGLE ,Caption:矩形

                                    IDM_ELLIPSE      ,Caption: 椭圆

2)在View类中,为“点、直线、矩形、椭圆”分别添加四个响应函数:OnDot、OnLine、OnRectangle、OnEllipse。

     以OnDot为例,步骤是,右击“点”菜单--》Class Wizard-->Class name选择“CXXXView”, Object选择“IDM_DOT”,Message选择“COMMMAD”-->选择Add Function-->Edit Code:如下:

    

图(3)为IDM_DOT添加信息响应函数

3)选择视图类CXXXView.h,添加两个成员变量:

               public       UINT m_nDrawType; //绘制类型;

                public      CPoint   m_ptOrigin; //起点;

    例如,“public  UINT m_nDrawType;”,右击“CXXXView”--》Add member Variable-->如下:

图(4)添加成员变量“public  UINT m_nDrawType;”

4)在构造函数CXXXVIEW()中,对两个成员变量进行初始化。  

CGraphicView::CGraphicView()
{
	// TODO: add construction code here
	m_nDrawType=0;
	m_ptOrigin=0;
}
void CGraphicView::OnDot() 
{
	// TODO: Add your command handler code here
	m_nDrawType=1;
}

void CGraphicView::OnLine() 
{
	// TODO: Add your command handler code here
	m_nDrawType=2;
}

void CGraphicView::OnRectangle() 
{
	// TODO: Add your command handler code here
	m_nDrawType=3;
}

void CGraphicView::OnEllipse() 
{
	// TODO: Add your command handler code here
	m_nDrawType=4;
}

4) 选择视图类CXXXView.h,添加两个按钮响应事件:OnLButtonDown()和OnLButtonUp()。

    并操作画图:画点、画直线、画矩形、画椭圆。

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);
}

void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CClientDC dc(this);
	CBrush *pBrush  = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
	dc.SelectObject(pBrush);
	switch(m_nDrawType){
	case 1:
		dc.SetPixel(point,RGB(0,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);
}


效果如下:

   

      

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sanqima

一键三连,多多益善

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值