注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

Windows应用高级编程笔记(6)  

2011-10-06 17:09:40|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
最近一直比较忙,学习的时间就显得比较少了,刚忙完一个小项目,又淘到一本好书,也是红皮书系列的,中文翻译是《Windows应用高级编程——C#编程篇》,翻译版由清华大学出版社出版。这本书说的比较详细,将许多书籍中细微末节的地方都说的比较清楚,采用面向对象的原则来介绍如何进行Windows编程,虽然带有“高级”字样,但是阐述详细,步骤清晰,对于一个初学者也是能够看得懂的。

Windows应用高级编程笔记(1) - Castor - 趁年轻,多折腾~~

========================================================================================= 

 

第5章 使用图形
设备语境:DC(Device Context),所有的图形操作都通过一个DC的GDI元素来发送的。
DC实现了设备的独立性,程序员就不用担心实际使用的设备到底是显示器还是打印机。
GGDI+中DC被Graphics类封装。
获取Graphics对象可以使用窗口的CreateGraphics方法,或者直接提供。注意画图完成之后要手动释放Graphics类。该类的方法主要有六种:画图,填充、测量、导入、剪切、转换。
Size、Point和Rectangle都有对应的浮点类型,就是在后面加上F,注意浮点数的字面值是double型的,所以一定要在后面加上f。
使用整型的运算速度远大于浮点方式的计算。
窗体的ClientRectangle属性,是一个指定客户区大小的矩形。
Color类指定画笔、刷子和其他Graphics类画图表明使用的工具的颜色。
该类由四个成员构成,R、G、B和A,A指定了透明度,默认为255,即不透明。
Color的静态方法FromArgb方法创建一个颜色变量。也有141种预定义的颜色(其中140种来自Web页面浏览器的HTML规范,另一个是Transparent颜色)
还有SystemColors类也提供了大量的颜色方案。
Pen类绘制线条。DrawLine、DrawCurve、DrawRectangleDrawBezier、DrawEllipse、DrawArc、SrawPie等方法实现基本图形的绘制。

生成和响应Paint事件
重画:Windows使用背景色填充客户区,然后给每个控件使用Paint事件。
OnPaint方法
protected override void OnPaint(PaintEventArgs e),其中e的属性有ClipRectangle和Graphics,分别是需要重画的区域和用来绘制的图形。
protected override void OnPaint(PaintEventArgs e)
{
    e.Graphics.DrawLine(new Pen(Color.Red, 5), new Point(100, 20), new Point(400, 100));
    base.OnPaint(e);
}
将会在每次重画的时候绘制一条直线。ClipRectangle是曾经被覆盖住的部分(剪切矩形),因此可以只重画ClipRectangle区域来优化绘图程序。

刷子工具
从Brush类继承,有SolidBrush,HatchBrush类,TextureBrush类,LinearGradientBrush类和PathGradientBrush类。
常用的填充方法有FillRectangle、FillEllipse和FillPie等。下图填充了一个饼图:
protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    Graphics g = e.Graphics;
    Color[] cc = new Color[] { Color.Red, Color.Green, Color.Blue };
    Rectangle rect = new Rectangle(50, 50, 100, 100);
    for (int i = 0; i < 3; i++)
    {
        SolidBrush sb = new SolidBrush(cc[i]);
        g.FillPie(sb, rect, i*120, 120);
    }
}

Windows应用高级编程笔记(6) - Castor - 趁年轻,多折腾~~

使用文本
字体Font对象
具有相似外观的字体分组成族,例如Arial、Consolas等。
字体大小以点为单位而不是像素,一点大约1/72英寸。
字体风格有加粗、倾斜和加下划线
Font类属性有FontFamily获取字体族名称,Name是字体名称,SizeInPoint是获取以点为单位的大小,Style获取字体样式,为FontStyle枚举,可为下列值Bold、Italic、Regular、Strikeout和Underline,可以组合。
注意:Font对象的所有属性都是只读的。
使用Graphics.DrawString绘制文本。
例如:e.Graphics.DrawString("Greeting!", f, sb, new PointF(30, 40));
Font.Height返回字体高度。Graphics.MeasureString使用像素大小返回文本的长度和高度
如果使用Rectangle对象传递给DrawString,则会封装或者剪切文本,使其可放入Rectangle内。
DrawString还接收StringFormat对象,决定文本的显示方式,通过StringFormatFlags构造一个StringFormat对象,StringFormatFlags可以是如下枚举值:DirectionRightToLeft、DirectionVertical、NoClip(文本在矩阵中放不下不剪切)、NoWrap(放不下不滚动文字),当然还有其他的。
例如:
Font f=new Font("Consolas",18);
SolidBrush sb=new SolidBrush(Color.Purple);
StringFormat sf = new StringFormat(StringFormatFlags.DirectionVertical | StringFormatFlags.DirectionRightToLeft);
e.Graphics.DrawString("Greeting!", f, sb, new PointF(30, 40),sf);

图像
Image类实际上是个抽象类,是另外两个图像类的基类:Bitmap和Metafile(记录画图操作)。
Image.FromFile和Image.Save分别打开和保存一个图形。Save方法还可以提供ImageFormat枚举决定保存的格式。
Graphics.DrawImage方法显示图像。
 


 

  评论这张
 
阅读(627)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016