0%

C# 显示空心文字效果

  • 来源:明日科技
  • 显示空心字的实现方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;

    namespace Example040_空心字体效果演示
    {
    /// <summary>
    /// Form1 的摘要说明。
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.TextBox textBox1;
    /// <summary>
    /// 必需的设计器变量。
    /// </summary>
    private System.ComponentModel.Container components = null;

    public Form1()
    {
    //
    // Windows 窗体设计器支持所必需的
    //
    InitializeComponent();

    //
    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
    //
    }

    /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose(bool disposing)
    {
    if (disposing)
    {
    if (components != null)
    {
    components.Dispose();
    }
    }
    base.Dispose(disposing);
    }

    #region Windows Form Designer generated code
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.button1 = new System.Windows.Forms.Button();
    this.textBox1 = new System.Windows.Forms.TextBox();
    this.SuspendLayout();
    //
    // button1
    //
    this.button1.Location = new System.Drawing.Point(24, 104);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(97, 23);
    this.button1.TabIndex = 0;
    this.button1.Text = "View";
    this.button1.Click += new System.EventHandler(this.button1_Click);
    //
    // textBox1
    //
    this.textBox1.Location = new System.Drawing.Point(24, 80);
    this.textBox1.Name = "textBox1";
    this.textBox1.Size = new System.Drawing.Size(96, 21);
    this.textBox1.TabIndex = 1;
    this.textBox1.Text = "textBox1";
    //
    // Form1
    //
    this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
    this.ClientSize = new System.Drawing.Size(152, 141);
    this.Controls.AddRange(new System.Windows.Forms.Control[] {
    this.textBox1,
    this.button1});
    this.Name = "Form1";
    this.Text = "Form1";
    this.ResumeLayout(false);

    }
    #endregion

    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main()
    {
    Application.Run(new Form1());
    }

    [System.Runtime.InteropServices.DllImport("gdi32")]
    private static extern IntPtr CreateFont(int H, int W, int E, int O, int FW, int I, int u, int S, int C, int OP, int CP, int Q, int PAF, string F);
    [System.Runtime.InteropServices.DllImport("gdi32")]
    private static extern IntPtr BeginPath(IntPtr hdc);
    [System.Runtime.InteropServices.DllImport("gdi32")]
    private static extern IntPtr EndPath(IntPtr hdc);
    [System.Runtime.InteropServices.DllImport("gdi32")]
    private static extern int SetBkMode(IntPtr hdc, int nBkMode);
    [System.Runtime.InteropServices.DllImport("gdi32")]
    private static extern IntPtr StrokePath(IntPtr hdc);
    [System.Runtime.InteropServices.DllImport("gdi32")]
    private static extern int TextOut(IntPtr hdc, int x, int y, string lpString, int nCount);
    [System.Runtime.InteropServices.DllImport("gdi32")]
    private static extern IntPtr SelectObject(IntPtr hdc, IntPtr hObject);
    [System.Runtime.InteropServices.DllImport("user32")]
    private static extern IntPtr GetDC(IntPtr hwnd);
    const int FW_HEAVY = 900;
    const int ANSI_CHARSET = 0;
    const int OUT_DEFAULT_PRECIS = 0;
    const int CLIP_DEFAULT_PRECIS = 0;
    const int DEFAULT_QUALITY = 0;
    const int DEFAULT_PITCH = 0;
    const int FF_SWISS = 32;
    const int TRANSPARENT = 1;

    private void button1_Click(object sender, System.EventArgs e)
    {
    IntPtr dc = GetDC(this.Handle);
    IntPtr m_Font = CreateFont(50, 20, 0, 0, FW_HEAVY, 1, 0,
    0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
    DEFAULT_PITCH | FF_SWISS, "Times New Roman");
    //创建字体
    //这里的字体一定要是TrueType Font

    BeginPath(dc);
    //开始捕获轮廓
    SetBkMode(dc, TRANSPARENT);
    IntPtr m_OldFont = SelectObject(dc, m_Font);
    TextOut(dc, 10, 0, this.textBox1.Text, this.textBox1.Text.Length);
    SelectObject(dc, m_OldFont);
    EndPath(dc);
    //结束捕获
    StrokePath(dc);
    //将捕获的轮廓用当前的Pen画到Canvas上
    }
    }
    }

    QQ图片20160704164551

    觉得文章有用?请我喝杯咖啡~