

How does the dialog manager calculate the average width of a character?
source link: https://devblogs.microsoft.com/oldnewthing/20221103-00/?p=107350
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

How does the dialog manager calculate the average width of a character?

Raymond Chen
Some time ago, I explained that the MapDialogRect
function requires the handle to a dialog box because the mapping from dialog units to pixels is dependent upon the default font of the dialog box, so you need to know which dialog box you are converting.
I noted that if you don’t have a dialog box, and you don’t want to find or make one, then you can simulate the calculations yourself using the standard formulas:
8 vertical dlu = | 1 character tall |
4 horizontal dlu = | 1 average character wide |
According to Knowledge Base article Q145994, the calculation of the character height and width are performed as follows:
For height, call GetTextMetrics
and use the tmHeight
.
For average width, get the text extent of the string
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
and divide it by 52, rounding to the nearest integer. Do not use the tmAveCharWidth
from the text metrics. Despite its name, it is not the average of anything. It’s just the width of the character x.
Bonus chatter: Maybe the font people interpreted it to mean “the width of an average character”, rather than “the average width of a character.”
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK