using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;namespace Example21设计字形窗体
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <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 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
// 
// Form1
// 
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load); }
#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("user32")]
private static extern IntPtr GetDC(IntPtr hwnd);
[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 IntPtr PathToRegion(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 SelectObject(IntPtr hdc,IntPtr hObject);
[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 SetWindowRgn(IntPtr hwnd,IntPtr hRgn,bool bRedraw);

const int FW_HEAVY=900;
const int ANSI_CHARSET=0;
const int OUT_DEFAULT_PRECTS=0;
const int CLIP_DEFAULT_QUALITY=0;
const int DEFAULT_QUALITY=0;
const int DEFAULT_PITCH=0;
const int FF_SWISS=32;
const int TRANSPARENT=1; private void Form1_Load(object sender, System.EventArgs e)
{
try 
{
IntPtr dc=GetDC(this.Handle);
IntPtr m_Font=CreateFont(200,100,0,0,FW_HEAVY,1,0,0,ANSI_CHARSET,
OUT_DEFAULT_PRECTS,CLIP_DEFAULT_QUALITY,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"宋体");//创建字体
BeginPath(dc);//开始记录窗体轮廓路径
SetBkMode(dc,TRANSPARENT);//设置背景为透明模式,这是必须的
IntPtr m_0ldFont=SelectObject(dc,m_Font);
TextOut(dc,0,0,"C#",2);
SelectObject(dc,m_0ldFont);
EndPath(dc);//结束记录窗体轮廓路径
IntPtr m_wndRgn=PathToRegion(dc);//把记录的路径转换为窗体轮廓句柄
SetWindowRgn(this.Handle,m_wndRgn,true);//赋予窗体指定的轮廓形状
}
catch(Exception)
{
MessageBox.Show("hello,there are some err!!!");
}
}
}
}
注:try..catch是我自己加的. 这个程序的结果应该是一个字形窗体,请大家赐教