我正在尝试使用 P/Invoke 和 Font.FromLogFont 从 LOGFONT 创建 System.Drawing.Font。已创建请求的字体,但它始终具有相同的渲染质量 - 无论我为 LOGFONT 结构的 lfQuality 成员分配了哪个值。
这是相关代码:
//LOGFONT struct
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class LOGFONT
{
public const int LF_FACESIZE = 32;
public int lfHeight;
public int lfWidth;
public int lfEscapement;
public int lfOrientation;
public int lfWeight;
public byte lfItalic;
public byte lfUnderline;
public byte lfStrikeOut;
public byte lfCharSet;
public byte lfOutPrecision;
public byte lfClipPrecision;
public byte lfQuality;
public byte lfPitchAndFamily;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = LF_FACESIZE)]
public string lfFaceName;
}
然后为 CreateFontIndirect 导入:
[DllImport("gdi32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr CreateFontIndirect(
[In, MarshalAs(UnmanagedType.LPStruct)]
LOGFONT lplf // characteristics
);
现在创建字体:
LOGFONT lf = new LOGFONT();
lf.lfFaceName = "DejaVu Sans";
lf.lfHeight = 36;
lf.lfQuality = 5;
IntPtr handle = CreateFontIndirect(lf);
Font f = Font.FromLogFont(lf);
因此,托管代码似乎忽略了 lfQuality 成员。有什么办法解决吗?我想控制某些字体的呈现方式,忽略系统全局设置。