葛藤プログラマの一日

2007-12-13

.NETでのLOGFONTの使い方

例えば、TextBox.Font

private LogFont _logFont = new LogFont();


public override Font Font {
get {
return base.Font;
}
set {
value.ToLogFont(_logFont);
_logFont.lfEscapement = 2700; // 文字列の傾き。反時計回りの角度
_logFont.lfFaceName = "@" + value.Name;
base.Font = Font.FromLogFont(_logFont);
}
}


// CharSetをUnicodeで指定すること!
//(そうしないと、lfFaceNameが正しく取得されない)
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
internal class LogFont
{
internal int lfHeight;
internal int lfWidth;
internal int lfEscapement;
internal int lfOrientation;
internal int lfWeight;
internal byte lfItalic;
internal byte lfUnderline;
internal byte lfStrikeOut;
internal byte lfCharSet;
internal byte lfOutPrecision;
internal byte lfClipPrecision;
internal byte lfQuality;
internal byte lfPitchAndFamily;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
internal string lfFaceName;
}