A person with a rude name asks, “Why does MS not document the system metrics used by classic/pre-uxtheme windows and common controls? This image is really useful and I wish all of this was actually documented.”
Actually, that picture explains why it isn’t documented.
Suppose such a picture existed in the Windows 2000 documentation. I don’t know what it would say exactly, so suppose, for the purpose of discussion, that it said that the caption buttons are exactly SM_CXFRAME
pixels from the right-hand edge of the window, and that the buttons are exactly SM_CXSIZE
pixels wide, with exactly SM_CXEDGE
pixels of padding between the buttons, and the buttons are exactly SM_CYSIZE
pixels tall, with SM_CYEDGE
pixels between the top of the button and the top of the window.
Once that picture existed in the documentation, the picture you linked to could never exist.
The picture from Windows 2000 doesn’t include the SM_CXPADDEDBORDER
or the the SM_CYPADDEDBORDER
. It can’t, because those metrics didn’t exist in Windows 2000. Since the diagram is part of the documentation, it is contractual, and it would not be possible to alter the layout of the window caption (say, by incorporating a new metric like SM_CXPADDEDBORDER
), because that would break existing code.
For example, a program may have looked at the diagram and concluded, “Okay, so if I want to programmatically click the Close button, I can go to the upper right corner of the window, move down SM_CYFRAME + 1
pixels, move left move down SM_CXFRAME + 1
pixels, and click there, and it will hit the button.”
And then Windows Vista shows up, adds some SM_CXPADDEDBORDER
between the Close button and the right edge, and the program stops working.
Publishing the redlines would force the visual layout to be locked in stone. Windows 95 could not have added the Close button. Windows Vista could not have added extra padding around the buttons.
Note that changing the visual layout of the caption does not break programs which draw their own caption bar. They will continue to draw the caption bar their own custom way. If they tried to mimic the Windows 2000 caption bar, then they will continue to mimic the Windows 2000 caption bar, even on Windows Vista. But nobody gets hurt, because the application is doing both the drawing and the hit-testing, so it remains in sync with itself.
0 comments