实例代码:
[StructLayout(LayoutKind.Sequential)]
struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
[DllImportAttribute("user32.dll")]
static extern int DrawTextA(
[InAttribute()]IntPtr HDC,
[InAttribute()]string String,
[InAttribute()]int StringCount,
[InAttribute(), OutAttribute()]ref RECT rect,
[InAttribute()]uint format
);
[DllImportAttribute("user32.dll")]
static extern IntPtr GetDC(
[InAttribute()]IntPtr hWnd
);
[DllImportAttribute("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowRect(
[InAttribute()]IntPtr Hwnd,
[InAttribute(),OutAttribute()]ref RECT rect
);
private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show(this.GetPixelWidth(this.Handle, "取字符串有多少像素宽!!!!!").ToString());
}
public int GetPixelWidth(IntPtr hWnd,string str)
{
RECT rect = new RECT();
GetWindowRect(hWnd, ref rect);
DrawTextA(GetDC(hWnd), str, -1, ref rect, 32 | 1024);
return rect.Right - rect.Left;
}