立体字BlockFont
2014-01-05 15:44
141 查看
XMarksTheSpot 基类见:http://blog.csdn.net/u013384702/article/details/17883367
基类FontMenuForm(带Font菜单,可随时选择各种字体、字形、大小以及删除线、下划线等)
Code:
效果图:
支持选择字体、字形
基类FontMenuForm(带Font菜单,可随时选择各种字体、字形、大小以及删除线、下划线等)
using System; using System.Drawing; using System.Windows.Forms; namespace CsStudy { class FontMenuForm : XMarksTheSpot { protected string strText = "Sample Text"; protected Font font = new Font("Times New Roman", 24, FontStyle.Italic); public new static void Main() { Application.Run(new FontMenuForm()); } public FontMenuForm() { Text = "Font Menu Form"; Menu = new MainMenu(); Menu.MenuItems.Add("&Font!", new EventHandler(MenuFontOnClick)); } void MenuFontOnClick(object obj, EventArgs e) { FontDialog dlg = new FontDialog(); dlg.Font = font; if (dlg.ShowDialog() == DialogResult.OK) { font = dlg.Font; Invalidate(); } } protected override void DoPage(System.Drawing.Graphics grph, System.Drawing.Color clr, int cx, int cy) { SizeF sizef = grph.MeasureString(strText, font); Brush brush = new SolidBrush(clr); grph.DrawString(strText, font, brush, (cx - sizef.Width) / 2, (cy - sizef.Height) / 2); } public float GetAscent(Graphics grph, Font font) { return font.GetHeight(grph) * font.FontFamily.GetCellAscent(font.Style) / font.FontFamily.GetLineSpacing(font.Style); } public float GetDescent(Graphics grph, Font font) { return font.GetHeight(grph) * font.FontFamily.GetCellDescent(font.Style) / font.FontFamily.GetLineSpacing(font.Style); } public float PointToPageUnits(Graphics grph, Font font) { float fFontSize; if (grph.PageUnit == GraphicsUnit.Display) fFontSize = 100 * font.SizeInPoints / 72; else fFontSize = grph.DpiX * font.SizeInPoints / 72; return fFontSize; } } }
Code:
using System; using System.Drawing; using System.Windows.Forms; namespace CsStudy { class BlockFont : FontMenuForm { const int iReps = 50; public new static void Main() { Application.Run(new BlockFont()); } public BlockFont() { Text = "Block Font"; Width *= 2; strText = "Block"; font = new Font("Times New Roman", 108); } protected override void DoPage(System.Drawing.Graphics grph, System.Drawing.Color clr, int cx, int cy) { SizeF sizef = grph.MeasureString(strText, font); float x = (cx - sizef.Width - iReps) / 2; float y = (cy - sizef.Height - iReps) / 2; grph.Clear(Color.LightGray);//以指定颜色来填充背景 for (int i = 0; i < iReps; i++) grph.DrawString(strText, font, Brushes.Black, x + i, y - i); grph.DrawString(strText, font, Brushes.White, x + iReps, y - iReps); } } }
效果图:
支持选择字体、字形
相关文章推荐
- 构建多线程应用程序2 Parallel 并行类:Parallel.ForEach()、Task异步操作类:Task.Factory.StartNew()、并行LINQ查询: AsParallel()
- Eclipse快捷键_10个最高效的快捷键
- MySQL ALTER TABLE: ALTER vs CHANGE vs MODIFY COLUMN
- 通信的几个概念
- 最近遇到的问题
- 位域
- python 的logging
- 每日英语:The Benefits of a Better Men's T-Shirt
- 读取手机内存和SD卡的空间大小
- 图论_图论好题题号
- JQ 选择器详解
- 使用OWA发送签名加密邮件
- Customize Netbeans Platform Splash Screen and About Dialog
- 常用Web开发工具
- ECSHOP 缓存问题的解决方法
- qnx与windows共享文件
- grep命令帮你恢复误删文件
- apt-get -f install 和 apt-get update
- Java算法:根据输入的数字计算所有的回文数
- 基于静态链的基数排序