|
2008/04/01(Tue) 03:42:30 編集(投稿者) 2008/04/01(Tue) 03:42:24 編集(投稿者)
<pre><pre>私も ExtTextOutで、遊んでみました。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices;
namespace WindowsFormsApplication1 {
public partial class Form1 : Form { [DllImport("gdi32.dll", EntryPoint = "SelectObject")] public static extern IntPtr SelectObject(IntPtr hdc, IntPtr bmp); [DllImport("gdi32.dll")] static extern bool ExtTextOut(IntPtr hdc, int X, int Y, uint fuOptions, [In] ref RECT lprc, string lpString, uint cbCount, [In] int [] lpDx);
[Serializable, StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; public int Top; public int Right; public int Bottom;
public RECT(int left_, int top_, int right_, int bottom_) { Left = left_; Top = top_; Right = right_; Bottom = bottom_; }
public int Height { get { return Bottom - Top; } } public int Width { get { return Right - Left; } } public Size Size { get { return new Size(Width, Height); } }
public Point Location { get { return new Point(Left, Top); } }
// Handy method for converting to a System.Drawing.Rectangle public Rectangle ToRectangle() { return Rectangle.FromLTRB(Left, Top, Right, Bottom); }
public static RECT FromRectangle(Rectangle rectangle) { return new RECT(rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Bottom); }
public override int GetHashCode() { return Left ^ ((Top << 13) | (Top >> 0x13)) ^ ((Width << 0x1a) | (Width >> 6)) ^ ((Height << 7) | (Height >> 0x19)); }
#region Operator overloads
public static implicit operator Rectangle(RECT rect) { return rect.ToRectangle(); }
public static implicit operator RECT(Rectangle rect) { return FromRectangle(rect); }
#endregion }
[Flags] public enum ETOOptions : uint { ETO_CLIPPED = 0x4, ETO_GLYPH_INDEX = 0x10, ETO_IGNORELANGUAGE = 0x1000, ETO_NUMERICSLATIN = 0x800, ETO_NUMERICSLOCAL = 0x400, ETO_OPAQUE = 0x2, ETO_PDY = 0x2000, ETO_RTLREADING = 0x800, }
public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) {
}
private void Form1_Paint(object sender, PaintEventArgs e) { this.Font = new Font("MS ゴシック", 20); RECT r = new RECT(); r.Left = 0; r.Top = 0; r.Bottom = 10; r.Right = 10; IntPtr hdc = e.Graphics.GetHdc(); SelectObject(hdc, this.Font.ToHfont()); ExtTextOut(hdc, 0, 0, (uint)ETOOptions.ETO_OPAQUE, ref r, "abc", 3, null); e.Graphics.ReleaseHdc(hdc); } } }
げげ、一度つかうと、APIの嵐になりますね。 ところで、this.Font = new Font("MS ゴシック", 20); この瞬間に、フォームのサイズが変わりますね。なんでだろ?</pre></pre>
|