Verfasst: 16.03.2006 16:34
Habe deinen Code mal angepasst sodas die farbe jetzt auch stimmt125 hat geschrieben:Hi,
kanns gerade nicht testen aber auf meinen Testrechnern in der Schule hatte ich das Problem nicht. Allerdings muss ich meinen Code nochmal anpassen, so wie er ist läuft er nur auf nicht geskinnten XP, (für mein WoW Design müsste ich dann ja ne andere RGB eintragen...) kann man die Farbe irgendwie schnell und zuverlässig ermitteln?
mfg
125
Code: Alles auswählen
;Benötigt um das Fenster der höhe und der weite des Desktops anzupassen
ExamineDesktops()
#WS_EX_LAYERED = $00080000
;-Unsere Constanten
Enumeration
#ParentWindow
#ChildWindow
#TextGadget
EndEnumeration
;-Unsere Procedure zum setzen der Transparenten Farbe (angegeben mit RGB(R,G,B))
Procedure SetWinTransparency(win,color)
If level>=0 And level<=100
SetWindowLong_(WindowID(win),#GWL_EXSTYLE,GetWindowLong_(WindowID(win),#GWL_EXSTYLE)|$00080000) ; #WS_EX_LAYERED = $00080000
SetLayeredWindowAttributes_(WindowID(win),color,0,1)
EndIf
EndProcedure
;-ParentWindow damit nichts in der Taskleiste erscheint
;OpenWindow(#ParentWindow,0,0,DesktopWidth(0),DesktopHeight(0),#PB_Window_Invisible,"PaintonDesk")
;-Unser Fenster mit dem wir auf den Desktop malen wollen
OpenWindow(#ChildWindow,0,0,DesktopWidth(0),DesktopHeight(0),#PB_Window_BorderLess|#PB_Window_Invisible,"PaintonDesk",GetDesktopWindow_()) ;WindowID(#ParentWindow))
;Textgadget zum Text anzeigen
CreateGadgetList(WindowID(#ChildWindow))
TextGadget(#TextGadget,0,0,200,200,"")
;Window auf Layered Window umschalten
SetWindowLong_(WindowID(#ChildWindow),#GWL_EXSTYLE,#WS_EX_LAYERED | #WS_EX_TRANSPARENT)
;Transparenz auf die Windows Standard Fensterfarbe setzen
SetWinTransparency(#ChildWindow,GetSysColor_(#COLOR_BTNFACE))
;Fenster fixieren
SetWindowPos_(WindowID(#ChildWindow),#HWND_BOTTOM,0,0,0,0,#SWP_NOMOVE|#SWP_NOREPOSITION|#SWP_NOSIZE)
;Fenster anzeigen
HideWindow(#ChildWindow,0)
Repeat
;-Zeit auf Desktop einblenden
SetGadgetText(#TextGadget,FormatDate("%hh:%ii:%ss",Date()))
;Was gegen die CPU Auslastung machen
Delay(10)
Until WindowEvent()=#PB_Event_CloseWindow
Und zwar liegt das fenster auch nicht HINTER den icons und wenn ich nun mehr als die kleine UHR da drauf darstelle sehe ich meine icon´s auf dem dektop nit mehr (man sieht nur wie sich der mauspfeil zur Hand ändert wenn ich über nem icon bin).
das Fenster sollte doch aber hinter den icons liegen sodas man die Icons noch immer voll sehen kann. Dies geht so wie ich es bis jetzt rasugefunden habe nur mit DirectX (siehe das beispiel was ich gepostet habe).
Ich hatte auch schon mal den Weg versucht den Daniel auch versucht hat mit FindWindowEx_() jedoch gehts auch da nit da ich dann zwar ein DC Handle bekomme jedoch auf dieses kein Context mit wglCreateContext_() erstellen kann (rückgabe ist immer 0) und somit kann ich auch mit OpenGL nix machen ohne Context.
Mal sehen ob ich noch mit meinem OpenGL ne lösung finde....
Gruß,
Nico