uxtheme.dll / IsThemeActive() / GraBackground()

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

uxtheme.dll / IsThemeActive() / GraBackground()

Beitrag von AUGE_OHR »

hi,

mit IsThemeActive() wird ja "entschieden" ob ich "visual Style" haben kann oder nicht.
Dabei wird auf die uxtheme.dll zugegriffen und man kann feststellen of "IsThemeActive" ist und ob die Application "IsAppThemed".

Wenn man nun z.b. einen Ownerdraw CLASS FROM XbpPushbutton erstellen will, kommt man zu der Frage mit den "visual Style".

Code: Alles auswählen

   ::DrawBackground( oPS, aInfo )
   ::DrawFrame( oPS, aInfo )
   ::DrawImage( oPS, aInfo )
   ::DrawText( oPS, aInfo )
das wäre ja so die Reihenfolge um einen Button zu "malen"

nun habe ich mit dem ::DrawBackground() das 1.) "Problem"

Code: Alles auswählen

METHOD Button:DrawBackground( oPS, aInfo )
   GraBackground( oPS, {aInfo[XBP_DRAWINFO_RECT][1],aInfo[XBP_DRAWINFO_RECT][2]},;
                       {aInfo[XBP_DRAWINFO_RECT][3],aInfo[XBP_DRAWINFO_RECT][4]} )
RETURN
eigentlich sollte GraBackground()
ist dem Xbase Part ein visueller Stil zugewiesen, verwendet GraBackground() die durch den Stil vorgegebene Hintergrundgrafik.
aber leider gibt er immer das System OS() Theme zurück und nicht die aktuellen Skin.

nun überlege ich, woher kommt eigentlich das GraBackground() ... hat das was mit uxtheme.dll zu tun ?
ich bin da auf http://www.codeproject.com/KB/tabs/themedtabpage.aspx gestossen wo von
Wrapping uxTheme

In order to draw the themed background, you have to call uxtheme.dll function DrawThemeBackground, which means calling into unmanaged code.

* bool Wrapper_IsAppThemed ();
* bool Wrapper_DrawBackground (const wchar_t* name, const wchar_t* part, const wchar_t* state, HDC hdc, ...);
* bool Wrapper_DrawThemeParentBackground (HWND hwnd, HDC hdc);
* bool Wrapper_DrawThemeParentBackgroundRect (HWND hwnd, HDC hdc, int ox, int oy, int dx, int dy);
* bool Wrapper_GetTextColor (const wchar_t* name, const wchar_t* part, const wchar_t* state, int* r, int* g, int* b)
hm ... wäre das nicht genau (naja nicht Xbase++) was ich suche ? leider "nur" C++ Source ...

auf der Website http://win7dll.info/uxtheme_dll.html habe ich eine "Exported Functions List" gefunden wo wohl "viel mehr" vorhanden ist als Alaska uns gibt ...

leider scheint es kein COM Interface zu geben, also müsste man das wohl mit DLLcall machen ?

Nun hab ich die Website http://www.vbaccelerator.com/home/VB/Co ... rticle.asp entdeckt und die ersten VB.NT Function für solche DLL Zugiffe und auf http://www.vbaccelerator.com/home/net/c ... rticle.asp noch mehr davon.

was alles mit "visual Style" möglich ist kann man sich unter http://www.codeproject.com/KB/miscctrl/uxtheme.aspx ansehen ...
und wir sprechen hier nicht von "Zusatztools" sondern vom OS() XP/VISTA/Win7 was wir auch mit Xbase++ können "müssten"
gruss by OHR
Jimmy
Antworten