本站首页    管理页面    写新日志    退出


«September 2023»
12
3456789
10111213141516
17181920212223
24252627282930


公告
暂无公告...

我的分类(专题)

日志更新

最新评论

留言板

链接


Blog信息
blog名称:VFP及Sql Server拙笔
日志总数:46
评论数量:107
留言数量:0
访问次数:428308
建立时间:2005年5月12日




[编程及数据库]VFP9.0的GDI+类的使用
文章收藏,  网上资源,  事件记录,  软件技术

老瓷 发表于 2013/2/2 23:54:09

GDI+你应该不会陌生吧,然而,在VFP里要使用这一技术,可不是一件容易的事,你得学习一大堆API函数。或许,一想到这,你已经望而却步了。不过,从现在起,这一技术不再是豪门旺族的专宠了,我们每一位Foxer都可以让它成为我们得心应手的好工具了。下面就跟我一起来领略它的风采吧。在9.0的版本里,有个叫_GDIplus的类,它位于VFP的安装目录下:Home(1) + “FFC\_GDIplus.vcx”,是的,这是API函数的封装类,既然已经是封装的类了,那么,我们就不用关心底层的API了,所心,我们完全可以像用普通的VFP类一样,就这么方便:这个类里有很多成员,但我们不必奢望太多,只须一部分,一部分就足够了。500)this.width=500'>有一个流程我们必须要搞清楚:倘若我们想手工画一幅画的话,首先得确定这幅的大小吧,这个大小我们可以用pgBitmap对象来设定,如果你是想在一幅已有的画上锦上添花的话,那就用gpImage对象,注意,这仅仅是一个预步骤,确定绘图尺寸。好,现在尺寸有了,那就跟据这个尺寸来弄张纸吧,要不然我们往哪儿画呢。说曹操曹操到,Gpgraphics对象就可以为你弄一张你想要的画布,大小跟你想像的一样。接下来的工作就是画笔和颜料了,按顺序,先确定你的颜料吧,gpColor对象可以为你生成你想要的颜料,且不用但心颜料量的问题。颜料问题我为你解决了,还有笔的问题,商店里有两种笔,不知你要哪种,一种是画轮廓的笔,gpPen,就是画线条的笔,另一种是实心笔,gpsolidbrush,用来写字和填充再适合不过了。好了,万事具备,只欠东风了,开始画吧。不过,好像你还是不会,我得教你一些本领,必竟这是VFP绘图,还记得前面为我们创建画布的东东吧,它能教我们很多绘图本领,比如画直线,画椭圆,画矩形,写文字,画贝兹曲线等等等等,呵呵,一口气我说不完。那么我也有点渴了,请允许我润一下嗓子……………….好了,我们来成就我们的第一幅作品吧,并将它保存为图片文件,你觉得我的建议怎么样:用表单设计器准备一个表单,大小嘛500*500好了,我们就在这个表单上画绘吧 SET CLASSLIB TO HOME(1) + "FFC\_gdiplus.vcx"loColorA = CREATEOBJECT("gpColor",255,0,0,255)          &&红色:颜色值为红,绿,蓝,透明度(0为透明,255为不透明)loColorB = CREATEOBJECT("gpColor",50,50,50,255)         &&深灰色:颜色值为红,绿,蓝,透明度(0为透明,255为不透明)loPen = CREATEOBJECT("gpPen",loColorB,2)                &&用前句创建的画笔颜色,画笔宽度为2个像素,可自行更改。loSolidBrush = CREATEOBJECT("gpSolidbrush",loColorA)    &&创建实体画笔,就要用于写文字和填充。lopoint = CREATEOBJECT("gpPoint",50,50)                 &&创建点对象loRectangle = CREATEOBJECT("gprectangle",50,50,300,300) &&创建矩形对象loGraphics = CREATEOBJECT("gpGraphics")                 &&创建画布对象loGraphics.createfromHwnd(Thisform.HWnd)                  &&将本画布对象设定为表单大小,这是固定写法。后面我会讲自定义画布大小loColorA.set(255,0,0,255)loSolidBrush.create(locolorA)lographics.FillPie(loSolidBrush,loRectangle,45,90)        &&绘制实心扇形图。下同 loColorA.set(0,255,0,255)loSolidBrush.create(locolorA)lographics.FillPie(loSolidBrush,loRectangle,135,90) loColorA.set(0,0,255,255)loSolidBrush.create(locolorA)lographics.FillPie(loSolidBrush,loRectangle,225,90) loColorA.set(110,16,172,255)loSolidBrush.create(locolorA)lographics.FillPie(loSolidBrush,loRectangle,315,90) loGraphics.Drawrectangle(loPen,50,50,300,300)             &&绘制矩形loGraphics.DrawLine(loPen,50,50,350,350)                  &&绘制直线loGraphics.Drawline(loPen,350,50,50,350)lographics.DrawEllipse(lopen,50,50,300,300)               &&绘制椭圆 以上程序段你可以放在表单的Pait()事件里,当然也可以放在其它的Click事件里。运行,看看效果吧。不过我们要将它保存为图片,这里我们得做必要的修改。如下:不过这次我是把代码写在了表单的Activate事件里了: SET CLASSLIB TO HOME(1) + "FFC\_gdiplus.vcx"Thisform.AddObject("ShowDrawing","Image")loColorA = CREATEOBJECT("gpColor",255,255,255,255)      &&红色:颜色值为红,绿,蓝,透明度(0为透明,255为不透明)loColorB = CREATEOBJECT("gpColor",50,50,50,255)         &&深灰色:颜色值为红,绿,蓝,透明度(0为透明,255为不透明) lobitmap = CREATEOBJECT("gpBitmap",Thisform.Width,Thisform.Height) loPen = CREATEOBJECT("gpPen",loColorA,2)                &&用前句创建的画笔颜色,画笔宽度为2个像素,可自行更改。loBrush = CREATEOBJECT("gpSolidbrush",loColorA) loSolidBrush = CREATEOBJECT("gpSolidbrush",loColorA)    &&创建实体画笔,就要用于写文字和填充。lopoint = CREATEOBJECT("gpPoint",50,50)                 &&创建点对象loRectangle = CREATEOBJECT("gprectangle",50,50,300,300) &&创建矩形对象loGraphics = CREATEOBJECT("gpGraphics")                 &&创建画布对象 *loGraphics.createfromHwnd(Thisform.HWnd)                 &&将本画布对象设定为表单大小,这是固定写法。后面我会讲自定义画布大小loGraphics.createfromImage(lobitmap)loGraphics.fillRectangle(loBrush,0,0,Thisform.Width,Thisform.Height) loColorA.set(255,0,0,255)loSolidBrush.create(locolorA)lographics.FillPie(loSolidBrush,loRectangle,45,90)        &&绘制实心扇形图。下同 loColorA.set(0,255,0,255)loSolidBrush.create(locolorA)lographics.FillPie(loSolidBrush,loRectangle,135,90) loColorA.set(0,0,255,255)loSolidBrush.create(locolorA)lographics.FillPie(loSolidBrush,loRectangle,225,90) loColorA.set(110,16,172,255)loSolidBrush.create(locolorA)lographics.FillPie(loSolidBrush,loRectangle,315,90) loGraphics.Drawrectangle(loPen,50,50,300,300)             &&绘制矩形loGraphics.DrawLine(loPen,50,50,350,350)                  &&绘制直线loGraphics.Drawline(loPen,350,50,50,350)lographics.DrawEllipse(lopen,50,50,300,300)               &&绘制椭圆 lSuccess = loBitmap.Savetofile("D:\test.jpg", "image/jpeg", "quality=100" ) IF lSuccess   Thisform.ShowDrawing.Picture = "D:\test.jpg"   Thisform.ShowDrawing.left = 0   Thisform.ShowDrawing.Top = 0   Thisform.ShowDrawing.Visible = .T.    WAIT WINDOW "图片已经保存到:D:\test.jpg" NOWAIT ELSE    MESSAGEBOX("图片保存失败")ENDIF


阅读全文(4668) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.025 second(s), page refreshed 144752096 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号