Alexandre Julliard wrote:
Frank Richter resqu@gmx.ch writes:
How Windows is doing theming I don't know completely. You enable theming by adding a manifest to the executable which instructs Windows to load comctl32.dll version 6.0 instead of version 5.x from system32/. That makes me believe that actually comctl32.dll is responsible for applying themes to controls (and not uxtheme); how it does it exactly, I don't know. Subclassing is a good guess I'd think, or maybe something like re-registering the standard control classes (if that is possible).
However, Windows also themes the non-client area of (almost) all apps even if they don't use comctl32 6.0. That must happen somewhere, too.
Then the first thing to do is to figure out exactly how Windows does it, and do it the same way.
typedef DWORD (CALLBACK * USERAPIHOOKPROC)(HINSTANCE hInstance, FARPROC *fnUserApis);
DWORD WINAPI RegisterUserApiHook(HINSTANCE hInstance, USERAPIHOOKPROC fnUserApiHook);
fnUserApis is an array of User functions that can be overridden.
RegisterUserApiHook is a function that is called once for the entire system and then user32 loads the specified module for each process and calls the specified fnUserApiHook function for that process. It is a cumbersome interface that may not be worth duplicating.
Rob