How To Calculate Dialog Base Units with Non-System-Based Font
Further, dialog box measurements are given in dialog base units. Onehorizontal base unit is equal to one-fourth of the average character widthfor the system font. One vertical base unit is equal to one-eighth of theaverage character height for the system font. An application can retrievethe number of pixels per base unit for the current display by using theGetDialogBaseUnits function. The low-order word of the return value, fromthe GetDialogBaseUnits function, contains the horizontal base units and thehigh-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 dialogbox 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)As the font of a dialog box changes, the actual size and position of acontrol also changes.
One dialog box base unit is equivalent to the number of pixels per dialogbox unit as follows:
1 horz dialog base unit == (2 * average char width dialog font / average char width system font) pixels1 vert dialog base unit == (2 * average char height dialog font / average char height system font) pixelsAverage character width and height of a font can be computed as follows:
hFontOld = SelectObject(hdc,hFont);GetTextMetrics(hdc,&tm);GetTextExtentPoint32(hdc,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrst" "uvwxyz",52,&size);avgWidth = (size.cx/26+1)/2;avgHeight = (WORD)tm.tmHeight;
You can use the MapDialogRect function to convert dialog box units intopixels, but there is no function that will convert pixels into dialog boxunits. You can use the formulas shown here to perform this conversion.
Article ID: 125681 - Last Review: 07/11/2005 19:29:53 - Revision: 2.3
- kbdlg kbhowto KB125681