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

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

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

网易考拉推荐

C# Graphics Programming笔记(三)  

2011-10-16 15:04:51|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这本书依旧是红皮书系列的,由Rod Stephens编写,网上有电子版的,使用搜索引擎一下就能找到,不过只有英文版的,好在对英文水平要求不高,过了CET-4绝对可以无障碍阅读。全书分8个章节,从简单的图形对象、画笔、刷子到复杂的位图、图形变换、打印等技术,最后还描述了一个从WPF而来的强有力的对象:FlowDocument,虽然这本书不能做到面面俱到而又深动详实,但全书言简意赅,结构紧凑,从宏观的角度介绍了GDI+编程的原理和方法,是一本不错的GDI+编程入门书籍。

C Graphics Programming笔记(一) - Castor - 趁年轻,多折腾~~
=================================================================================

第三章    绘制文本

Graphics对象的DrawString方法绘制文本。

private void Form1_Paint(object sender, PaintEventArgs e)

{

    int x = 10;

    int y = 10;

    string s = "I Smell Megic in the air";

    //粗体,删除线

    using (Font the_font = new Font("Consolas", 20,FontStyle.Bold|FontStyle.Strikeout, GraphicsUnit.Point))

    {

        e.Graphics.DrawString(s, the_font, Brushes.Blue, x, y);

        SizeF text_size = e.Graphics.MeasureString(s, the_font);

        e.Graphics.DrawRectangle(Pens.Red, x, y,text_size.Width, text_size.Height);

        y += (int)text_size.Height;

    }

    //常规,下划线

    using (Font the_font = new Font("Comic Sans MS", 20,FontStyle.Regular|FontStyle.Underline, GraphicsUnit.Point))

    {

        e.Graphics.DrawString(s, the_font, Brushes.Blue, x, y);

        SizeF text_size = e.Graphics.MeasureString(s, the_font);

        e.Graphics.DrawRectangle(Pens.Red, x, y,text_size.Width, text_size.Height);

        y += (int)text_size.Height;

    }

    //粗体和斜体

    using (Font the_font = new Font("Arial", 20,FontStyle.Italic | FontStyle.Bold, GraphicsUnit.Point))

    {

        e.Graphics.DrawString(s, the_font, Brushes.Blue, x, y);

        SizeF text_size = e.Graphics.MeasureString(s, the_font);

        e.Graphics.DrawRectangle(Pens.Red, x, y,text_size.Width, text_size.Height);

        y += (int)text_size.Height;

    }

}

 

C Graphics Programming笔记(三) - Castor - 趁年轻,多折腾~~

其中MeasureString方法能够获取文本的大小,返回类型为SizeF

使用布局矩形

实现文本的自动换行。

private void Form1_Paint(object sender, PaintEventArgs e)

{

    e.Graphics.Clear(this.BackColor);

    e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;

    string LongString = "this is a very long string demostrating a long string can be wrapped to fit it's area";

    Rectangle rect = new Rectangle(10, 10,this.ClientSize.Width - 20, this.ClientSize.Height - 20);

    using (Font the_font = new Font("Times New Roman", 20,FontStyle.Regular, GraphicsUnit.Point))

    {

        e.Graphics.DrawString(LongString, the_font, Brushes.Black, rect);

        e.Graphics.DrawRectangle(Pens.Blue, rect);

    }

}

C Graphics Programming笔记(三) - Castor - 趁年轻,多折腾~~

 

DrawString方法还能接受StringFormat对象控制格式。该对象的主要属性有AlignmentFormatFlagsHotkeyPrefixLineAlignmentTrimming.

Alignment的值可以是NearCenterFar,分别是左中右对齐。

LineAlignment值和Alignment的一样,决定了行在布局矩形中对齐的方法,分别是上中下对齐。

FormatFlags的值可以是FitBlackBoxLineLimitNoClipNoWrap

HotkeyPrefix的值可以是HideShowNone,注意字符串中需要有&符号。

Trimming的值可以是CharacterEllipsisCharacterEllipsisPathEllipsisWordNoneWord

private void Form1_Paint(object sender, PaintEventArgs e)

{

    e.Graphics.Clear(this.BackColor);

    e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;

    string LongString = "this is a very long string demostrating a long string can be wrapped to fit it's area";

    Rectangle rect = new Rectangle(10, 10,this.ClientSize.Width - 20, this.ClientSize.Height - 20);

    using (Font the_font = new Font("Times New Roman", 20,FontStyle.Regular, GraphicsUnit.Point))

    {

        using (StringFormat sf = new StringFormat())

        {

            sf.Alignment = StringAlignment.Center;

            sf.FormatFlags = StringFormatFlags.LineLimit;

            sf.Trimming = StringTrimming.EllipsisWord;

            sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Show;

            e.Graphics.DrawString(LongString, the_font, Brushes.Black, rect, sf);

            e.Graphics.DrawRectangle(Pens.Blue, rect);

        }

    }

}

  评论这张
 
阅读(1667)| 评论(1)
推荐 转载

历史上的今天

评论

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

页脚

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