static LRESULT CALLBACK ThemePreWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, ULONG_PTR ret,PDWORD unknown) { switch(Msg) { case WM_THEMECHANGED: UXTHEME_LoadTheme(TRUE); return 0; } return 0; }
/*********************************************************************** * UXTHEME_InitSystem */ void UXTHEME_InitSystem(HINSTANCE hInst) { static const WCHAR szWindowTheme[] = { 'u','x','_','t','h','e','m','e','\0' }; static const WCHAR szSubAppName[] = { 'u','x','_','s','u','b','a','p','p','\0' }; static const WCHAR szSubIdList[] = { 'u','x','_','s','u','b','i','d','l','s','t','\0' }; static const WCHAR szDialogThemeEnabled[] = { 'u','x','_','d','i','a','l','o','g','t','h','e','m','e','\0' }; hDllInst = hInst; atWindowTheme = GlobalAddAtomW(szWindowTheme); atSubAppName = GlobalAddAtomW(szSubAppName); atSubIdList = GlobalAddAtomW(szSubIdList); atDialogThemeEnabled = GlobalAddAtomW(szDialogThemeEnabled); UXTHEME_LoadTheme(); }
BOOL CALLBACK ThemeInitApiHook(UAPIHK State, PUSERAPIHOOK puah) { if (!puah || State != uahLoadInit) { UXTHEME_LoadTheme(FALSE); ThemeCleanupWndContext(NULL, 0); gbThemeHooksActive = FALSE; return TRUE; } gbThemeHooksActive = TRUE; /* Store the original functions from user32 */ user32ApiHook = *puah; puah->DefWindowProcA = ThemeDefWindowProcA; puah->DefWindowProcW = ThemeDefWindowProcW; puah->PreWndProc = ThemePreWindowProc; puah->PostWndProc = ThemePostWindowProc; puah->PreDefDlgProc = ThemePreWindowProc; puah->PostDefDlgProc = ThemePostWindowProc; puah->DefWndProcArray.MsgBitArray = gabDWPmessages; puah->DefWndProcArray.Size = UAHOWP_MAX_SIZE; puah->WndProcArray.MsgBitArray = gabMSGPmessages; puah->WndProcArray.Size = UAHOWP_MAX_SIZE; puah->DlgProcArray.MsgBitArray = gabMSGPmessages; puah->DlgProcArray.Size = UAHOWP_MAX_SIZE; puah->SetWindowRgn = ThemeSetWindowRgn; UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCPAINT); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCACTIVATE); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCMOUSEMOVE); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCMOUSELEAVE); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCHITTEST); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCLBUTTONDOWN); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCUAHDRAWCAPTION); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCUAHDRAWFRAME); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_SETTEXT); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_WINDOWPOSCHANGED); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_CONTEXTMENU); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_STYLECHANGED); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_SETICON); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_NCDESTROY); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_SYSCOMMAND); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_CTLCOLORMSGBOX); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_CTLCOLORBTN); UAH_HOOK_MESSAGE(puah->DefWndProcArray, WM_CTLCOLORSTATIC); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_CREATE); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_SETTINGCHANGE); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_DRAWITEM); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_MEASUREITEM); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_WINDOWPOSCHANGING); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_WINDOWPOSCHANGED); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_STYLECHANGING); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_STYLECHANGED); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_NCCREATE); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_NCDESTROY); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_NCPAINT); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_MENUCHAR); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_MDISETMENU); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_THEMECHANGED); UAH_HOOK_MESSAGE(puah->WndProcArray, WM_UAHINIT); UXTHEME_LoadTheme(TRUE); return TRUE; }