/* Fills the specified buffer with the metrics for the currently selected font. */ internal static int GetTextMetrics(HandleRef hDC, ref NativeMethods.TEXTMETRIC lptm) { if (Marshal.SystemDefaultCharSize != 1) { // Handle Unicode return(SafeNativeMethods.GetTextMetricsW(hDC, out lptm)); } // Handle ANSI; call GetTextMetricsA and translate to Unicode struct NativeMethods.TEXTMETRICA tEXTMETRICA = new NativeMethods.TEXTMETRICA(); int result = SafeNativeMethods.GetTextMetricsA(hDC, out tEXTMETRICA); lptm.tmHeight = tEXTMETRICA.tmHeight; lptm.tmAscent = tEXTMETRICA.tmAscent; lptm.tmDescent = tEXTMETRICA.tmDescent; lptm.tmInternalLeading = tEXTMETRICA.tmInternalLeading; lptm.tmExternalLeading = tEXTMETRICA.tmExternalLeading; lptm.tmAveCharWidth = tEXTMETRICA.tmAveCharWidth; lptm.tmMaxCharWidth = tEXTMETRICA.tmMaxCharWidth; lptm.tmWeight = tEXTMETRICA.tmWeight; lptm.tmOverhang = tEXTMETRICA.tmOverhang; lptm.tmDigitizedAspectX = tEXTMETRICA.tmDigitizedAspectX; lptm.tmDigitizedAspectY = tEXTMETRICA.tmDigitizedAspectY; lptm.tmFirstChar = Convert.ToChar(tEXTMETRICA.tmFirstChar); lptm.tmLastChar = Convert.ToChar(tEXTMETRICA.tmLastChar); lptm.tmDefaultChar = Convert.ToChar(tEXTMETRICA.tmDefaultChar); lptm.tmBreakChar = Convert.ToChar(tEXTMETRICA.tmBreakChar); lptm.tmItalic = tEXTMETRICA.tmItalic; lptm.tmUnderlined = tEXTMETRICA.tmUnderlined; lptm.tmStruckOut = tEXTMETRICA.tmStruckOut; lptm.tmPitchAndFamily = tEXTMETRICA.tmPitchAndFamily; lptm.tmCharSet = tEXTMETRICA.tmCharSet; return(result); }
private static extern int GetTextMetricsA(HandleRef hDC, out NativeMethods.TEXTMETRICA lptm);