立体字BlockFont

本文介绍如何基于XMarksTheSpot基类实现立体字BlockFont,包括利用FontMenuForm来选择字体、字形、大小以及添加删除线、下划线等特性。详细代码展示实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XMarksTheSpot 基类见:http://blog.youkuaiyun.com/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);
        }
    }
}

效果图:



支持选择字体、字形


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值