Patch by Robert Shearman rob(a)codeweavers.com, Use GdiGetCharDimensions
Instead of DIALOG_GetCharSize.
Modified: trunk/reactos/lib/gdi32/objects/font.c
Modified: trunk/reactos/lib/user32/include/user32.h
Modified: trunk/reactos/lib/user32/windows/dialog.c
_____
Modified: trunk/reactos/lib/gdi32/objects/font.c
--- trunk/reactos/lib/gdi32/objects/font.c 2005-07-24 22:17:02 UTC
(rev 16721)
+++ trunk/reactos/lib/gdi32/objects/font.c 2005-07-25 04:21:29 UTC
(rev 16722)
@@ -806,6 +806,12 @@
*
* SEE ALSO
* GetTextExtentPointW, GetTextMetricsW, MapDialogRect.
+ *
+ * Despite most of MSDN insisting that the horizontal base unit is
+ * tmAveCharWidth it isn't. Knowledge base article Q145994
+ * "HOWTO: Calculate Dialog Units When Not Using the System Font",
+ * says that we should take the average of the 52 English upper and
lower
+ * case characters.
*/
/*
* @implemented
_____
Modified: trunk/reactos/lib/user32/include/user32.h
--- trunk/reactos/lib/user32/include/user32.h 2005-07-24 22:17:02 UTC
(rev 16721)
+++ trunk/reactos/lib/user32/include/user32.h 2005-07-25 04:21:29 UTC
(rev 16722)
@@ -33,5 +33,6 @@
/* FIXME: FILIP */
HGDIOBJ STDCALL NtGdiSelectObject(HDC hDC, HGDIOBJ hGDIObj);
+DWORD STDCALL GdiGetCharDimensions(HDC, LPTEXTMETRICW, DWORD *);
#endif /* USER32_H */
_____
Modified: trunk/reactos/lib/user32/windows/dialog.c
--- trunk/reactos/lib/user32/windows/dialog.c 2005-07-24 22:17:02 UTC
(rev 16721)
+++ trunk/reactos/lib/user32/windows/dialog.c 2005-07-25 04:21:29 UTC
(rev 16722)
@@ -692,11 +692,14 @@
if (dlgInfo->hUserFont)
{
SIZE charSize;
- if (DIALOG_GetCharSize( dc, dlgInfo->hUserFont, &charSize
))
+ HFONT hOldFont = SelectObject( dc, dlgInfo->hUserFont );
+ charSize.cx = GdiGetCharDimensions( dc, NULL, &charSize.cy
);
+ if (charSize.cx)
{
dlgInfo->xBaseUnit = charSize.cx;
dlgInfo->yBaseUnit = charSize.cy;
}
+ SelectObject( dc, hOldFont );
}
ReleaseDC(0, dc);
}
@@ -1828,7 +1831,8 @@
if ((hdc = GetDC(0)))
{
- if (DIALOG_GetCharSize( hdc, 0, &size )) units = MAKELONG(
size.cx, size.cy );
+ size.cx = GdiGetCharDimensions( hdc, NULL, &size.cy );
+ if (size.cx) units = MAKELONG( size.cx, size.cy );
ReleaseDC( 0, hdc );
}
}