Patch by Robert Shearman rob@codeweavers.com, Use GdiGetCharDimensions Instead of DIALOG_GetCharSize.

svn path=/trunk/; revision=16722
This commit is contained in:
James Tabor 2005-07-25 04:21:29 +00:00
parent 971f04ec99
commit a2f80d0873
3 changed files with 13 additions and 2 deletions

View file

@ -806,6 +806,12 @@ RemoveFontResourceA(
*
* 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

View file

@ -33,5 +33,6 @@
/* FIXME: FILIP */
HGDIOBJ STDCALL NtGdiSelectObject(HDC hDC, HGDIOBJ hGDIObj);
DWORD STDCALL GdiGetCharDimensions(HDC, LPTEXTMETRICW, DWORD *);
#endif /* USER32_H */

View file

@ -692,11 +692,14 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
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 @@ GetDialogBaseUnits(VOID)
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 );
}
}