基于MFC的绘画板系统的研究
2016-12-07李超
李超
(鹤壁市机电信息工程学校,河南 鹤壁 458030)
基于MFC的绘画板系统的研究
李超
(鹤壁市机电信息工程学校,河南 鹤壁 458030)
针对当前绘画板软件的使用比较复杂的问题,本文针对初学者设计了绘画板系统来满足使用者的需求。首先对系统的功能和界面进行了分析,对系统开发的软硬件环境进行了描述;其次对系统的部分模块进行了详细的分析。本文对软件开发初学者和一线教学工作者都具有积极的意义。
MFC;绘画板;面向对象
1 前言
随着信息技术的飞速发展,人们的工作和生活领域与信息技术的结合越来越紧密,计算机在很多领域上开始淘汰传统的手工劳作方式,利用计算机进行绘画制图已经成为一种时尚。绘图板工具的普及为人们打开了一扇新的艺术大门,辅助人们更好地发挥艺术才能。绘图最常用的软件有金山画王、我行我素、Photoshop和Painter等。虽然这些绘图软件功能强大,但是操作复杂,对于只需要对图片做简单编辑或者绘制简单图形的用户来说,不可能花费大量的时间来通过学习完成对这些复杂软件的操作。因此,根据实际情况,开发简易绘画板系统,能够满足用户的简单需求。
2 绘图板系统分析
2.1 功能介绍
绘图板系统的功能比较多,但结合当前一般用户的需求,主要有以下几个功能:铅笔、毛笔、缩放、喷枪、橡皮、画刷、色板等。
在绘制图图形时,主要利用鼠标进行操作,无论是画线还是绘图,采用先选中对应的功能模块,然后将鼠标移至绘图区域,按下鼠标左键不放,同时按照所绘制图形的轨迹移动鼠标。色板是根据RGB三原色的原理,在系统的界面上进行调色,得到相应的颜色,并将其应用在对应的工具(画笔、喷枪、绘图及画刷等)上,丰富图形的色彩。其功能结构如图1所示:
图1 系统的功能结构
2.2 界面分析
按照面向对象程序设计的思想,分析得出了系统所需的各种类,包括画刷类、椭圆类、字体类、线形类、多边形类、矩形类、直线类等,每一个类都存储了用户绘制图形时所需存储的信息。软件的界面风格力求简洁、操作简便、实用灵活的原则,每个功能模块也就是主界面上的一个菜单项或者工具栏中的一项按钮,这样可以让用户感觉功能模块比较清晰,使用起来比较方便。
界面介绍:
(1)纵向工具栏:用户可以从中选择绘图工具;
(2)横向工具栏:用户可以从中选择选型,线宽,画刷种类;
(3)色板:用户调色;
(4)图形绘制区域:用户绘图操作区。
2.3 系统开发及运行环境
(1)硬件环境
CPU:1.3GHZ或者更高;内存:256MB以上;24位色彩分辨率及以上。
(2)软件环境
操作系统:Windows 2000,Windows Xp或者更高;开发环境:VC++6.0。
3 系统实现
3.1 文字编辑功能模块
显示文本要使用CDC类的成员函数Wordedit,函数参数为:
BOOLWordedit(int x,int y,const CString zifu)
其中,x是待编辑的文本在编辑区中的水平位置;y是对应的垂直位置;zifu是待编辑的内容。
存储字体的信息采用一个结构体类型进行描述,在WINDOWS中,结构体名为TextMETRIC,获得字体的具体信息通过以下函数:
BOOL GetTextMetrics(LPTEXTMETRIC sjzt)
其中,参数sjzt是用户定义的结构体类型TEXTMETRIC的指针。在调用绘图函数的过程中利用GetTextMetrics函数得到字体的结构体信息。
另外,为了接收用户输入的字符,当用户按下非系统键时产生的消息,则会产生WM_CHAR消息,在消息结构体tagMSG的成员wParam则保存了用户所按键的ASCII码。将获取的键的ASCII码存入对象数组,最后调用OnDraw()函数对获取的文字信息作为一个图片绘制到编辑区中,具体代码如下:
void CPaintView::OnFonts()
{
Draw_Style=DRAW_FONTS;国//用户点击了工具栏中的文字编辑按钮
}
void CPaintView::OnChar(UINT nChar,UINT nRepCnt, UINT nFlags) //在画板上写字
{
if(Draw_Style==DRAW_FONTS)//文字编辑按钮被选中
{
m_bFontSelect=true;
//CFont font;
CClientDC dc(this);
TEXTMETRIC tm;//创建TEXTMETRIC结构变量存储字体信息
dc.GetTextMetrics(&tm);//获得字体信息
Out_Fonts+=nChar;
if(0x0d==nChar)//用户敲击回车键,0x0d为回车键的ASCII码
{
CPaintDoc*pDoc=GetDocument(); CShape*pShape; pShape=new CFonts(m_ptFontDian, Out_Fonts);
pDoc->AddShape(pShape);//添加到对象数组
Out_Fonts.Empty();
m_ptFontDian.y+=tm.tmHeight;
}
CSize sz=dc.GetTextExtent(Out_Fonts); CDian pt;
pt.x=m_ptFontDian.x+sz.cx;
pt.y=m_ptFontDian.y;
SetCaretPos(pt);//设定光标位置
dc.TextOut(m_ptFontDian.x,m_ptFontDian.y,
Out_Fonts);//输出文字
CScrollView::OnChar(nChar,nRepCnt,nFlags);
}
}
绘制文字函数的代码:
void CPaintView::DrawFonts(CDian dian)//绘制文字
{
CPaintDoc*pDoc=GetDocument();//获取存储的对象信息
CShape*pShape;
if(Draw_Style==DRAW_FONTS)
{
SetCaretPos(dian);//选择光标位置
m_ptFontDian=dian; ShowCaret(); //显示光标
}
if(true==m_bFontSelect && Draw_Style! = DRAW_FONTS)
{
pShape=new CFonts(m_ptFontDian,Out_Fonts); pDoc->AddShape(pShape); Out_Fonts="";
HideCaret(); //隐藏光标
}
3.2 调色板模块
作为调色的控件悬浮于用户工作区,通过创建CColor-Panel的对象m_pColorPanel,然后调用CcolorPanel的Create ()函数创建工具栏,用户在色板区域通过滑动红、绿、蓝下的滑块,根据需要调整画笔的RGB,将调好颜色的画笔载入设备描述环境,随后便能够用该颜色的画笔进行绘图了。
class CColorPanel:public Cdialog//色板继承类
{
public:
CView*m_pView;
CColorPanel(CView*pView);
BOOL Create();//创建色板工具栏
COLORREF clrButn;
...........
}
创建色板工具栏:
m_pColorPanel->Create();//其 中 m_pColorPanel 为CcolorPanel类的对象
3.3 放大缩小功能设计
在VC6.0利用MFC进行系统设计,其中设备环境CDC中有两个成员函数StretchBlt()和BitBlt(),可以通过改变函数的参数值来实现当前视图的缩放范围,进而对位图进行放大或缩小显示,其核心代码如下所示:
CDC*tpzj=GetDC(); CRect jxkh;
GetClientRect(&jxkh);
if(Draw_Style==HTQYIN)
tpzj->StretchBlt(- dian.x/len,- dian.y/len,jxkh.right*len, jxkh.bottom*len,tpzj,0,0,jxkh.right,jxkh.bottom,SRCCOPY);
//对选中的图片进行放大操作
if(Draw_Style==HTQYOUT)
tpzj->StretchBlt(- dian.x/len,- dian.y/len,jxkh.right/len, jxkh.bottom/len,tpzj,0,0,jxkh.right,jxkh.bottom,SRCCOPY);
/对选中的图片进行缩小操作
4 结语
本文针对简易的绘图板系统进行研究,当前社会上画图工具种类比较多,但是大部分使用起来需要专门的学习或培训,极大地限制了使用者的积极性。简易的绘图板系统无需专门的培训即可进行操作。本文由于篇幅所限,只对关键部分的实现进行了分析,希望为软件开发初学者和教学工作者提供一些参考。
[1]David J.Kruglinski etc(希望图书创作室).Visual C++6.0技术内幕[M].北京:北京希望电子出版社,1999.
[2]李烜,周家纪.设备场景(DC)在Windows GD I中的应用[J].物探化探计算技术,1998,20(1):76.
[3]Eugene Olafsen,Kenn Scribner,K.DavidWhite,et al.MFC Visual C++6编程技术内幕(王建华,陈一飞,张焕生等译)[M].北京:机械工业出版社,2000.
[4]孙永强,陆波,杨丽昆.Framework程序设计[M].北京:清华大学出版社,2001.
[5]郭中华,连亿东,伍冯洁,等.基于嵌入式的人脸图像采集显示系统的制作[J].电脑与电信,2015(7):32-34.
Research on the Drawing Board System Based on MFC
Li Chao
(Hebi Mechanical and Electrical Information Engineering School,Hebi 458030,Henan)
In view of the complex problems in the current drawing board software,this paper designs a drawing board system for beginners.At first,the function and the interface of the system are analyzed,and the software and hardware environment of the system is described.Then,some modules of the system are analyzed in detail.This article has the positive significance to the software development beginners and the first teaching staff.
MFC;drawing board;object-oriented
TP391.41
A
1008-6609(2016)07-0092-03
李超,男,河南信阳人,本科,讲师,研究方向:计算机科学与技术。