使用Visual Studio进行MFC单文档下的菜单绘图(直线、三角形、正方形、逐渐向中心收缩的矩形)

一、创建单文档MFC工程

        1、打开vs,创建新项目

        选择MFC工程(我是之前创建过,如果左边没有,可以在右侧输入框输入MFC),然后点击下一步。

        2、选择单文档

        输入工程名字,点击右下角创建后,弹出基于对话框、单文档、多文档等形式创建,此时选择单文档,如下图所示。

二、修改菜单

        1、增添绘图项

        在右侧资源视图Menu目录下的IDR_MAINFRAME文件,双击打开,出现菜单列。

        点击空白的请在此处键入,输入“绘图”,按下回车。会进入绘图下的子菜单,分别输入直线、三角形、正方形。

        依次双击新建的按钮 或者 右键选择属性(直线、三角形、正方形),将其“属性”中的“弹出菜单(pop up)”改为False,一般默认False,不需更改。

        2、添加响应函数

        更增添的按钮添加响应,右键,选择“添加事件处理程序”。

        消息类型选择commend,类列表选择“C+文件名+View”,点击创建。不难看出我在创建工程时的文件名是CMFCApplication1。

四、代码

        1、直线

        经历上一步,跳转到 “文件名+View.cpp” 的文件中,在函数 “void CMFCApplication1View::On32771()” 下,找到的 “// TODO: 在此添加命令处理程序代码”,输入按下按钮需要执行的操作即可。

        直线代码

	CClientDC dc(this);
	CPen NewPen;  //创建画笔
	//PS_SOLID 实线,PS_DASH 虚线,PS_DOT 点线,PS_DASHDOT 点化线,PS_DASHDOTDOT 双点化线
	NewPen.CreatePen(PS_SOLID, 5, RGB(255,0,0));
	dc.SelectObject(NewPen);
	dc.MoveTo(30,150);//起点
	dc.LineTo(200,10);//终点

        效果(编译后,点击绘图子菜单的直线,面版上出现一条红色直线):

       

        2、三角形

        操作同直线一样,不过多赘述。在此放上代码如下:

CClientDC dc(this);
CPen pen(PS_SOLID, 5, RGB(138, 43, 226));
CPen* oldPen = dc.SelectObject(&pen);
CPoint pt[3] = { CPoint(280,20),CPoint(490,20), CPoint(260,200) };
dc.Polygon(pt, 3);

        编译效果:

        3、正方形

        我在画三角形和正方形时,用的都是Ploygon方法,简单的把 pt[3] 改为了pt[4],并在其等号后加了一个点。

        代码示例:

	CClientDC dc(this);
	CPen pen(PS_SOLID, 5, RGB(50, 205, 50));
	CPen* oldPen = dc.SelectObject(&pen);
	CPoint pt[4] = { CPoint(580,20),CPoint(770,20), CPoint(770,210),CPoint(580,210)};
	dc.Polygon(pt, 4);

        编译结果:

       4、向中心收缩的矩形

        可以参考上一个正方形的例子,把边框的点改一下,转为矩形。外加一个for循环就可以了。如果想产生动画效果:一步一步向中心收缩的矩形画出,加一个sleep()函数即可。

        代码如下:

void CMFCApplication1View::On32777()
{
	// TODO: 在此添加命令处理程序代码
	CClientDC dc(this);
	CPen pen(PS_SOLID, 3, RGB(0,128,255));
	CPen* oldPen = dc.SelectObject(&pen);
	for (int i = 0; i <6; i++) {
		CPoint pt[4] = { CPoint(30+i*20,260+i*20),CPoint(400-i*20,260+i*20), CPoint(400-i*20,490-i*20),CPoint(30+i*20,490-i*20) };
		dc.Polygon(pt, 4);
		Sleep(1000);
	}
}

        编译结果:

本文到此就结束了,我也在新学阶段,有问题可留言讨论哦~ 

  • 18
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值