一.准备工作
1.根据老师的运行实例mfc 画图板,在建立MFC程序时使用的高级视图功能
1)由于同学经常上课时,使用的都是经典的基础视图,而课程设计文档中的视图是高级视图mfc 画图板,对比运行的视图,我尝试着把程序的视图设为跟课程设计文档里面一样的
2.参考老师发的代码,分析程序所需要的类和各个文件之间的关系
1)设计类
自己创建一个WShape(以W开头便于和MFC的类区分)图元类,派生图元类单独创建.h和.cpp文件,便于管理,虽然切换有些麻烦,但后期修改很方面,我没有像示例程序里面那样把所有的类都放在shape文件里面
基类是WShape
数据成员:
1)原点坐标(鼠标点击的点)
*2)旋转角度(单独为文本类设计,其他图形不使用)
3)和线以及填充有关的属性字段
成员函数
1)有参数的构造函数
2)绘制图元的函数
3)判断鼠标点击的位置是否在图形内部的函数,是否打开属性设计窗口
4)序列化数据的函数
5)重新设置图元的属性的函数
注意:要在每个派生类的.h头文件里面声明该类型支持序列化,并在.cpp源文件里面指定序列化的版本
例如:矩形类
DECLARE_SERIAL(WRectangle)//声明类WRectangle是支持序列化
IMPLEMENT_SERIAL(WRectangle, CObject, 1)//实现类WSquare的序列化,指定版本为1
派生类为(http://www.jizhuomi.com/software/244.html)CDC博客
1)正方形类Square,矩形类Rectangle,对于正方形类,除了基类WShape之外的数据成员外,有一个独立的width数据,而矩形类只是在此基础上加上一个height数据,两者的绘图原理是一样的,CDC类的pDC对象中有绘制矩形的函数
2)圆类Circle,椭圆类Ellipse,椭圆类既有长半轴,也有短半轴,两者的绘图原理是一样的,使用CDC类的pDC对象中绘制椭圆的函数
3)三角类Triangle,使用CDC类的pDC对象中绘制多边形的Polygon函数(图片),(https://msdn.microsoft.com/en-us/library/fxhhde73.aspx#cdc__polyline)参看微软官网上的函数用法,要把多边形的顶点放在一个坐标点数组里面,并指定多边形的顶点的个数
4)文本Text类,采取自定义的字体来实现,旋转角度是自定义字体的一个参数
解决方法
使用CreateFontIndirect(const LOGFONT* lpLogFont)函数创建斜率字体,参数lpLogFont->lfEscapement是字体的角度
网址(http://bbs.csdn.net/topics/20746)
LOGFONT logfont;//创建自己的字体
lstrcpy((LPSTR)logfont.lfFaceName,(LPSTR)"楷体_GB2312");
logfont.lfWeight=700;
logfont.lfWidth=40;
logfont.lfHeight=70;
logfont.lfEscapement=angle;
//这个参数就是用来控制角度,这里是正常显示
logfont.lfUnderline=FALSE;
logfont.lfItalic=FALSE;
logfont.lfStrikeOut=FALSE;
logfont.lfCharSet=GB2312_CHARSET;
hFont=CreateFontIndirect(&logfont);
……
下面就是使用该字体了,
hOldFont=(HFONT*)dc.SelectObject(hFont);
2)设计对话框
使用MFC的控件,来搭建对话框的界面,适当修改控件的ID值
1)Combobox下拉框控件
所用的函数
GetCurSel()来获取鼠标焦点的值的序号,注意下拉框的sort属性,默认是true,会按照自然排序,这样和你添加内容的顺序就会不一样,可以改为false
AddString()来向下拉框控件里面添加内容,也可以到VS2015的属性框里面的data属性里面添加,Ctrl+Enter换行
2)Listbox列表框控件
所用的函数
GetCurSel()来获取鼠标焦点的值的序号
AddString()来向列表框控件里面添加内容
3)MFC ColorButton颜色选取控件
所用的函数
Getcolor()获取当前选择的颜色,类型是COLORREF,以RGB的形式储存
4)Static Text静态文本控件
用来制作前台界面
5)Edit Control编辑文本控件
用来让用户输入参数值
二.开始MFC编程
根据课程设计文档里要推动的功能来一步步编程
1.和对话框相关的功能
使用控件的消息映射并且相关的成员变量来推动
1)初始化对话框(初始化函数)
向下拉框以及列表框里面添加内容
BOOL WAttribute::OnInitDialog()
{
CDialogEx::OnInitDialog();
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-141527-1.html
期待新歌