2019-04-21 12:54:39 -05:00
// 6 april 2015
# include "uipriv_windows.hpp"
# include "attrstr.hpp"
HINSTANCE uipriv_hInstance = NULL ;
int uipriv_nCmdShow ;
//HFONT hMessageFont;
# define wantedICCClasses ( \
ICC_STANDARD_CLASSES | /* user32.dll controls */ \
ICC_PROGRESS_CLASS | /* progress bars */ \
ICC_TAB_CLASSES | /* tabs */ \
ICC_LISTVIEW_CLASSES | /* table headers */ \
ICC_UPDOWN_CLASS | /* spinboxes */ \
ICC_BAR_CLASSES | /* trackbar */ \
ICC_DATE_CLASSES | /* date/time picker */ \
0 )
// see https://devblogs.microsoft.com/oldnewthing/20041025-00/?p=37483
EXTERN_C IMAGE_DOS_HEADER __ImageBase ;
2019-04-21 13:49:16 -05:00
# define errICCFailed "InitCommonControlsEx() failed"
# define errICCFailedNoLastError "InitCommonControlsEx() failed, but didn't specify why. This usually means you forgot the Common Controls v6 manifest; refer to the libui documentation for instructions."
# define errCoInitializeFailed "CoInitialize() failed"
# define errHRESULTInitErrorsSuffix ": 0x00000000"
static const char * initErrors [ ] = {
errICCFailed errHRESULTInitErrorsSuffix ,
errICCFailedNoLastError ,
errCoInitializeFailed errHRESULTInitErrorsSuffix ,
NULL ,
} ;
# define uiprivInitReturnHRESULT(err, msg, hr) uiprivInitReturnErrorf(err, "%s: 0x%08I32X", msg, hr)
2019-04-21 12:54:39 -05:00
int uiInit ( void * options , uiInitError * err )
{
STARTUPINFOW si ;
INITCOMMONCONTROLSEX icc ;
HRESULT hr ;
2019-04-21 13:49:16 -05:00
if ( ! uiprivInitCheckParams ( options , err , initErrors ) )
2019-04-21 12:54:39 -05:00
return 0 ;
if ( uipriv_hInstance = = NULL )
uipriv_hInstance = ( HINSTANCE ) ( & __ImageBase ) ;
uipriv_nCmdShow = SW_SHOWDEFAULT ;
GetStartupInfoW ( & si ) ;
if ( ( si . dwFlags & STARTF_USESHOWWINDOW ) ! = 0 )
uipriv_nCmdShow = si . wShowWindow ;
ZeroMemory ( & icc , sizeof ( INITCOMMONCONTROLSEX ) ) ;
icc . dwSize = sizeof ( INITCOMMONCONTROLSEX ) ;
icc . dwICC = wantedICCClasses ;
2019-04-21 13:49:16 -05:00
if ( InitCommonControlsEx ( & icc ) = = 0 ) {
DWORD lasterr ;
lasterr = GetLastError ( ) ;
if ( lasterr = = 0 )
return uiprivInitReturnError ( err , errICCFailedNoLastError ) ;
return uiprivInitReturnHRESULT ( err , errICCFailed , HRESULT_FROM_WIN32 ( lasterr ) ) ;
}
2019-04-21 12:54:39 -05:00
hr = CoInitialize ( NULL ) ;
if ( hr ! = S_OK & & hr ! = S_FALSE )
return ieHRESULT ( " initializing COM " , hr ) ;
// LONGTERM initialize COM security
2019-04-21 13:49:16 -05:00
// LONGTERM turn off COM exception handling
2019-04-21 12:54:39 -05:00
2019-04-21 13:49:16 -05:00
uiprivMarkInitialized ( ) ;
return 1 ;
2019-04-21 12:54:39 -05:00
}
void uiUninit ( void )
{
2019-04-21 13:49:16 -05:00
CoUninitialize ( ) ;
2019-04-21 12:54:39 -05:00
}
2019-04-21 12:57:19 -05:00
# ifndef uiStatic
2019-04-21 12:54:39 -05:00
BOOL WINAPI DllMain ( HINSTANCE hinstDLL , DWORD fdwReason , LPVOID lpvReserved )
{
if ( fdwReason = = DLL_PROCESS_ATTACH )
hInstance = hinstDLL ;
return TRUE ;
}
2019-04-21 12:57:19 -05:00
# endif