From 8fa040da9d0d3826f5ffda6bcbec4f53abd97452 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Wed, 27 Oct 2021 13:55:16 -0500 Subject: Allow more customization of control ids in thmutil. Allow BAFunctions to set control ids. Make sure control ids don't collide. --- src/api/burn/balutil/inc/BAFunctions.h | 18 ++++++++++++++++++ src/api/burn/balutil/inc/BalBaseBAFunctions.h | 9 +++++++++ src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h | 12 ++++++++++++ src/api/burn/balutil/inc/IBAFunctions.h | 8 ++++++++ 4 files changed, 47 insertions(+) (limited to 'src/api') diff --git a/src/api/burn/balutil/inc/BAFunctions.h b/src/api/burn/balutil/inc/BAFunctions.h index 43786701..2a34aaad 100644 --- a/src/api/burn/balutil/inc/BAFunctions.h +++ b/src/api/burn/balutil/inc/BAFunctions.h @@ -85,6 +85,7 @@ enum BA_FUNCTIONS_MESSAGE BA_FUNCTIONS_MESSAGE_ONTHEMELOADED = 1024, BA_FUNCTIONS_MESSAGE_WNDPROC, + BA_FUNCTIONS_MESSAGE_ONTHEMECONTROLLOADING, }; typedef HRESULT(WINAPI *PFN_BA_FUNCTIONS_PROC)( @@ -94,6 +95,10 @@ typedef HRESULT(WINAPI *PFN_BA_FUNCTIONS_PROC)( __in_opt LPVOID pvContext ); +// Should be the same as THEME_FIRST_ASSIGN_CONTROL_ID. +// BAFunctions must only assign ids in the range [BAFUNCTIONS_FIRST_ASSIGN_CONTROL_ID, 0x8000) to avoid collisions. +const WORD BAFUNCTIONS_FIRST_ASSIGN_CONTROL_ID = 0x4000; + struct BA_FUNCTIONS_CREATE_ARGS { DWORD cbSize; @@ -108,6 +113,19 @@ struct BA_FUNCTIONS_CREATE_RESULTS LPVOID pvBAFunctionsProcContext; }; +struct BA_FUNCTIONS_ONTHEMECONTROLLOADING_ARGS +{ + DWORD cbSize; + LPCWSTR wzName; +}; + +struct BA_FUNCTIONS_ONTHEMECONTROLLOADING_RESULTS +{ + DWORD cbSize; + BOOL fProcessed; + WORD wId; +}; + struct BA_FUNCTIONS_ONTHEMELOADED_ARGS { DWORD cbSize; diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctions.h b/src/api/burn/balutil/inc/BalBaseBAFunctions.h index a3054709..c2c8a6dc 100644 --- a/src/api/burn/balutil/inc/BalBaseBAFunctions.h +++ b/src/api/burn/balutil/inc/BalBaseBAFunctions.h @@ -841,6 +841,15 @@ public: // IBAFunctions return E_NOTIMPL; } + virtual STDMETHODIMP OnThemeControlLoading( + __in LPCWSTR /*wzName*/, + __inout BOOL* /*pfProcessed*/, + __inout WORD* /*pwId*/ + ) + { + return S_OK; + } + protected: CBalBaseBAFunctions( __in HMODULE hModule, diff --git a/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h b/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h index 8d1227fc..efe22ddd 100644 --- a/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h +++ b/src/api/burn/balutil/inc/BalBaseBAFunctionsProc.h @@ -24,6 +24,15 @@ static HRESULT BalBaseBAFunctionsProcWndProc( return pBAFunctions->WndProc(pArgs->pTheme, pArgs->hWnd, pArgs->uMsg, pArgs->wParam, pArgs->lParam, &pResults->lres); } +static HRESULT BalBaseBAFunctionsProcOnThemeControlLoading( + __in IBAFunctions* pBAFunctions, + __in BA_FUNCTIONS_ONTHEMECONTROLLOADING_ARGS* pArgs, + __inout BA_FUNCTIONS_ONTHEMECONTROLLOADING_RESULTS* pResults + ) +{ + return pBAFunctions->OnThemeControlLoading(pArgs->wzName, &pResults->fProcessed, &pResults->wId); +} + /******************************************************************* BalBaseBAFunctionsProc - requires pvContext to be of type IBAFunctions. Provides a default mapping between the message based BAFunctions interface and @@ -125,6 +134,9 @@ static HRESULT WINAPI BalBaseBAFunctionsProc( case BA_FUNCTIONS_MESSAGE_WNDPROC: hr = BalBaseBAFunctionsProcWndProc(pBAFunctions, reinterpret_cast(pvArgs), reinterpret_cast(pvResults)); break; + case BA_FUNCTIONS_MESSAGE_ONTHEMECONTROLLOADING: + hr = BalBaseBAFunctionsProcOnThemeControlLoading(pBAFunctions, reinterpret_cast(pvArgs), reinterpret_cast(pvResults)); + break; } } diff --git a/src/api/burn/balutil/inc/IBAFunctions.h b/src/api/burn/balutil/inc/IBAFunctions.h index 7d8a07fa..d41b7c9b 100644 --- a/src/api/burn/balutil/inc/IBAFunctions.h +++ b/src/api/burn/balutil/inc/IBAFunctions.h @@ -31,4 +31,12 @@ DECLARE_INTERFACE_IID_(IBAFunctions, IBootstrapperApplication, "0FB445ED-17BD-49 __inout LPVOID pvResults, __in_opt LPVOID pvContext ) = 0; + + // OnThemeControlLoading - Called while creating a control for the theme. + // + STDMETHOD(OnThemeControlLoading)( + __in LPCWSTR wzName, + __inout BOOL* pfProcessed, + __inout WORD* pwId + ) = 0; }; -- cgit v1.2.3-55-g6feb