您的位置:首页 > 其它

立体字BlockFont

2014-01-05 15:44 141 查看
XMarksTheSpot 基类见:http://blog.csdn.net/u013384702/article/details/17883367

基类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);
}
}
}


效果图:



支持选择字体、字形

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: