2015-05-20 16:09:58 -05:00
// 20 may 2015
# include "uipriv_windows.h"
2015-06-02 11:55:12 -05:00
// we as Common Controls 6 users don't need to worry about the height of comboboxes; see http://blogs.msdn.com/b/oldnewthing/archive/2006/03/10/548537.aspx
2015-05-22 08:43:45 -05:00
2015-08-30 11:25:53 -05:00
struct uiCombobox {
uiWindowsControl c ;
2015-05-20 16:09:58 -05:00
HWND hwnd ;
} ;
2015-08-30 11:25:53 -05:00
uiWindowsDefineControl (
uiCombobox , // type name
uiComboboxType // type function
)
2015-05-29 18:48:27 -05:00
2015-05-20 16:09:58 -05:00
// from http://msdn.microsoft.com/en-us/library/windows/desktop/dn742486.aspx#sizingandspacing
# define comboboxWidth 107 /* this is actually the shorter progress bar width, but Microsoft only indicates as wide as necessary */
# define comboboxHeight 14
2015-08-31 16:50:23 -05:00
static void minimumSize ( uiWindowsControl * c , uiWindowsSizing * d , intmax_t * width , intmax_t * height )
2015-05-20 16:09:58 -05:00
{
2015-08-30 11:25:53 -05:00
* width = uiWindowsDlgUnitsToX ( comboboxWidth , d - > BaseX ) ;
* height = uiWindowsDlgUnitsToY ( comboboxHeight , d - > BaseY ) ;
2015-05-20 16:09:58 -05:00
}
2015-08-30 11:25:53 -05:00
void uiComboboxAppend ( uiCombobox * c , const char * text )
2015-05-20 16:09:58 -05:00
{
WCHAR * wtext ;
LRESULT res ;
wtext = toUTF16 ( text ) ;
res = SendMessageW ( c - > hwnd , CB_ADDSTRING , 0 , ( LPARAM ) wtext ) ;
if ( res = = ( LRESULT ) CB_ERR )
logLastError ( " error appending item to uiCombobox " ) ;
else if ( res = = ( LRESULT ) CB_ERRSPACE )
logLastError ( " memory exhausted appending item to uiCombobox " ) ;
uiFree ( wtext ) ;
}
2015-05-21 20:45:31 -05:00
static uiCombobox * finishNewCombobox ( DWORD style )
2015-05-20 16:09:58 -05:00
{
2015-08-30 11:25:53 -05:00
uiCombobox * c ;
2015-05-20 16:09:58 -05:00
2015-08-30 11:25:53 -05:00
c = ( uiCombobox * ) uiNewControl ( uiComboboxType ( ) ) ;
2015-05-20 16:09:58 -05:00
2015-08-31 11:33:44 -05:00
c - > hwnd = uiWindowsEnsureCreateControlHWND ( WS_EX_CLIENTEDGE ,
2015-05-29 17:03:24 -05:00
L " combobox " , L " " ,
style | WS_TABSTOP ,
hInstance , NULL ,
TRUE ) ;
2015-05-20 16:09:58 -05:00
2015-08-30 11:25:53 -05:00
uiWindowsFinishNewControl ( c , uiCombobox ) ;
2015-05-20 16:09:58 -05:00
2015-08-30 11:25:53 -05:00
return c ;
2015-05-20 16:09:58 -05:00
}
2015-05-21 20:45:31 -05:00
uiCombobox * uiNewCombobox ( void )
{
return finishNewCombobox ( CBS_DROPDOWNLIST ) ;
}
uiCombobox * uiNewEditableCombobox ( void )
{
return finishNewCombobox ( CBS_DROPDOWN ) ;
}