// For Windows, Microsoft just hands you a list of preferred control sizes as part of the MSDN documentation and tells you to roll with it.
// These sizes are given in "dialog units", which are independent of the font in use.
// We need to convert these into standard pixels, which requires we get the device context of the OS window.
// References:
// - http://msdn.microsoft.com/en-us/library/windows/desktop/aa511279.aspx#controlsizing for control sizes
// - http://msdn.microsoft.com/en-us/library/ms645502%28VS.85%29.aspx - the calculation needed
// - http://support.microsoft.com/kb/125681 - to get the base X and Y
// (thanks to http://stackoverflow.com/questions/58620/default-button-size)
// For push buttons, date/time pickers, links (which we don't use), toolbars, and rebars (another type of toolbar), Common Controls version 6 provides convenient methods to use instead, falling back to the old way if it fails.
// As we are left with incomplete data, an arbitrary size will be chosen
const(
defaultWidth=100// 2 * preferred width of buttons
)
typedlgunitsstruct{
widthint
heightint
longestbool// TODO actually use this
getsizeuintptr
areabool// use area sizes instead
yoffint
yoffaltint
}
// TODO
/*
varstdDlgSizes=[nctypes]dlgunits{
c_button:dlgunits{
width:50,
height:14,
getsize:_BCM_GETIDEALSIZE,
},
c_checkbox:dlgunits{
// widtdh is not defined here so assume longest
longest:true,
height:10,
},
c_combobox:dlgunits{
// technically the height of a combobox has to include the drop-down list (this is a historical accident: originally comboboxes weren't drop-down)
// but since we're forcing Common Controls version 6, we can take advantage of one of its mechanisms to automatically fix this mistake (bad practice but whatever)
// see also: http://blogs.msdn.com/b/oldnewthing/archive/2006/03/10/548537.aspx
// note that the Microsoft guidelines pages don't take the list size into account
longest:true,
height:12,// from http://msdn.microsoft.com/en-us/library/windows/desktop/bb226818%28v=vs.85%29.aspx; the page linked above says 14
},
c_lineedit:dlgunits{
longest:true,
height:14,
},
c_label:dlgunits{
longest:true,
height:8,
yoff:3,
yoffalt:0,
},
c_listbox:dlgunits{
longest:true,
// height is not clearly defined here ("an integral number of items (3 items minimum)") so just use a three-line edit control
height:14+10+10,
},
c_progressbar:dlgunits{
width:237,// the first reference says 107 also works; TODO decide which to use