HOWTO: Calculate Dialog Base Units with Non-System-Based FontID: Q125681
|
This article demonstrates how to calculate the dialog base unit for the dialog box using a font other than System Font in Windows 95. You can use this calculation to build dialog box templates in memory or calculate dialog box dimensions.
Each dialog box template contains measurements that specify the position,
width, and height of the dialog box and the controls it contains. These
measurements are device-independent, so an application can use a single
template to create the same dialog box for all types of display devices.
This ensures that a dialog box will have the same proportions and
appearance on all screens despite differing resolutions and aspect ratios
between screens.
Further, dialog box measurements are given in dialog base units. One
horizontal base unit is equal to one-fourth of the average character width
for the system font. One vertical base unit is equal to one-eighth of the
average character height for the system font. An application can retrieve
the number of pixels per base unit for the current display by using the
GetDialogBaseUnits function. The low-order word of the return value, from
the GetDialogBaseUnits function, contains the horizontal base units and the
high-order word of the return value, from the GetDialogBaseUnits function,
contains the vertical base units.
Using this information, you can compute the dialog base units for a dialog
box using font other than system font:
horz pixels == 2 * horz dialog units * (average char width of dialog font
/ average char width of system font)
vert pixels == 2 * vert dialog units * (average char height of dialog font
/ average char height of system font)
1 horz dialog base unit == (2 * average char width dialog font
/ average char width system font) pixels
1 vert dialog base unit == (2 * average char height dialog font
/ average char height system font) pixels
hFontOld = SelectObject(hdc,hFont);
GetTextMetrics(hdc,&tm);
GetTextExtentPoint32(hdc,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrst"
"uvwxyz",52,&size);
avgWidth = (size.cx/26+1)/2;
avgHeight = (WORD)tm.tmHeight;
For more information on this topic, please see the following article in the Microsoft Knowledge Base:
HOWTO: Calculate Dialog Units When Not Using the System Font
Additional query words:
Keywords : kbDlg kbGrpUser kbWinOS95
Version : WINDOWS:
Platform : WINDOWS
Issue type : kbhowto
Last Reviewed: January 24, 1999