Auf Desktop zeichnen...
den hinetergrund zu tauschen ist für die alles, was irgendwie dynamisch verändert werden soll viel zu langsam.
edit:
habe grade noch was gefunden, man kann wohl den device context vom hintergrund mit GetDC_(GetDesktopWindow_()) bekommen. dass sollte eigentlich reichen um drauf pinseln zu können, hab aber grade keine zeit es aus zu probieren. vieleicht hilft dir das ja als ansatz.
edit:
habe grade noch was gefunden, man kann wohl den device context vom hintergrund mit GetDC_(GetDesktopWindow_()) bekommen. dass sollte eigentlich reichen um drauf pinseln zu können, hab aber grade keine zeit es aus zu probieren. vieleicht hilft dir das ja als ansatz.
hattest Du hier mal geguckt?
http://forums.purebasic.com/german/view ... intergrund
Da gings um's selbe Thema .. ist dort auch schon gescheitert.
http://forums.purebasic.com/german/view ... intergrund
Da gings um's selbe Thema .. ist dort auch schon gescheitert.
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Dieses Thema hab ich bereits über die Suche gefunden, nur wirklich weiter gebracht hat es mich nicht. Mir würde es schon genügen (das mit "auf dem Desktop herumpinseln" ist wohl zu komplex), wenn ich ein Fenster hätte, das auf der gleichen Höhe liegt wie der Desktop und das man nicht in den Vordergrund oder vor andere Fenster platzieren kann. Das würde mir für den Anfang schon reichen. In diesem Fenster könnte man ja dann machen, was man möchte...
Gruß
Gruß
Gruß, Daniel
| In der Realität ist die Wirklichkeit ganz anders...
PB 4.10 (Windows XP SP 2)

PB 4.10 (Windows XP SP 2)
in der Art eventuell
Code: Alles auswählen
OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu,"immer hinten")
Repeat
event=WaitWindowEvent()
SetWindowPos_(WindowID(0),#HWND_BOTTOM,0,0,0,0,#SWP_NOMOVE|#SWP_NOREPOSITION|#SWP_NOSIZE)
Until event=#PB_Event_CloseWindow
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Vielleicht habe ich die Lösung, wie ich das Fenster durchklickbar machen kann. Im Code-Archiv von PureArea.net habe ich in der Fenster-Sektion folgendes Beispiel gefunden:
Dieser Code erzeugt ein Owned-Window. Das Parent-Fenster (hwnd1) liegt hinter dem Child-Fenster (hwnd2), das Child ist praktisch "topmost". Wenn man nun das Parent-Fenster hinter das Child-Fenster schiebt und nun auf dem Child-Fenster herumklickt (Beispielsweise versucht, das "X" vom Parent-Fenster anzuklicken, das durch das Child-Fenster verdeckt wird), werden die Klicks einfach durch das Child-Fenster an das Parent-Fenster hindurchgereicht - als ob das Child gar nicht existieren würde.
Nun habe ich das ganze weiter gesponnen und habe mir gedacht, dass man ja das Handle vom Desktop dem "CreateWindowEx_()" übergeben könnte, sodass der Desktop ein Owned-Child-Window bekommt. Theoretisch müssten dann die Klicks einfach wirkungslos bleiben und direkt an den Desktop weitergereicht werden. Und zusammen mit dem Code von bobobo wäre das Fenster immer auf der Höhe des Desktops. Folgender Code also:
Dieser Code müsste theoretisch funtionieren (habe ich mir nur schnell zusammengeschrieben). Allerdings müsste ich bei hWnd2 das ModuleHandle (<- was ist das eigentlich?) vom Desktop ermitteln, ansonsten funktioniert das nicht. Könnte mir da jemand eventuell weiterhelfen, denn mit der Windows API kenn ich mich nicht wirklich gut aus
THX
Code: Alles auswählen
hWnd1.l = OpenWindow(1, 10, 10, 300, 300, #PB_Window_SystemMenu | #WS_OVERLAPPEDWINDOW, "Hallo")
hWnd2.l = CreateWindowEx_(0, "Static", "owned Window", #WS_VISIBLE | #WS_OVERLAPPEDWINDOW, 20, 20, 100, 100, hWnd1, 0, GetModuleHandle_(0), 0)
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
Nun habe ich das ganze weiter gesponnen und habe mir gedacht, dass man ja das Handle vom Desktop dem "CreateWindowEx_()" übergeben könnte, sodass der Desktop ein Owned-Child-Window bekommt. Theoretisch müssten dann die Klicks einfach wirkungslos bleiben und direkt an den Desktop weitergereicht werden. Und zusammen mit dem Code von bobobo wäre das Fenster immer auf der Höhe des Desktops. Folgender Code also:
Code: Alles auswählen
; hWnd1 bleibt erst mal als Dummy-Fenster da, sonst gibt es einen Runtime-Error mit der Schleife unten...
hWnd1.l = OpenWindow(1, 10, 10, 300, 300, #PB_Window_SystemMenu | #WS_OVERLAPPEDWINDOW, "Hallo")
hwndDesktop.l = GetDesktopHandle_()
hWnd2.l = CreateWindowEx_(0, "Static", "owned Window", #WS_VISIBLE | #WS_OVERLAPPEDWINDOW, 20, 20, 100, 100, hWndDesktop, 0, GetModuleHandle_(0), 0)
Repeat
event = WaitWindowEvent()
SetWindowPos_(WindowID(hWnd2),#HWND_BOTTOM,0,0,0,0,#SWP_NOMOVE|#SWP_NOREPOSITION|#SWP_NOSIZE)
Until event = #PB_Event_CloseWindow

THX
Gruß, Daniel
| In der Realität ist die Wirklichkeit ganz anders...
PB 4.10 (Windows XP SP 2)

PB 4.10 (Windows XP SP 2)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
>> hwndDesktop.l = GetDesktopHandle_()
Gibts das?
Kannste aber ersetzen durch:
hwndDesktop.l = 0
Gibts das?
Kannste aber ersetzen durch:
hwndDesktop.l = 0

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Was ist den der Unterschied zwischen DesktopWindow und Desktop.
Desktop hat immer 0 als Handle. DesktopWindow hat ein extra Handle?
Zu Deinem Problem:
wäre die logische Konsequenz
//Nachtrag:
Um Dein Fenster als Unterfenster des Desktops zu erklären, kannste es normal erstellen und mit:zum Desktopfenster machen.
Desktop hat immer 0 als Handle. DesktopWindow hat ein extra Handle?
Zu Deinem Problem:
Code: Alles auswählen
GetModuleHandle_(GetDesktopWindow_())
//Nachtrag:
Um Dein Fenster als Unterfenster des Desktops zu erklären, kannste es normal erstellen und mit:
Code: Alles auswählen
SetParent_(DeinFensterhWnd, 0)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Aus aktuellem Anlass
http://forums.purebasic.com/german/viewtopic.php?t=7106
weiß ich wie verwirrend das sein kann.
Hie mal eine Zusammenstellung dessen was ich in den letzten 24 Stunden gelernt habe :
http://forums.purebasic.com/german/viewtopic.php?t=7106
weiß ich wie verwirrend das sein kann.
Hie mal eine Zusammenstellung dessen was ich in den letzten 24 Stunden gelernt habe :
Code: Alles auswählen
; Der Desktop sollte rechts nicht verdeckt sein !!!
; so wie ts-soft es sagt :
text$ = "Hello World !"
hWin=0 ; Der Bildschirm - wer hier malt, malt eventuell auf andere Fenster
MyDC = GetDC_(hWin) ; DeviceContext zum malen, schreiben, ....
SetBkMode_(MyDC, #TRANSPARENT)
TextOut_(MyDC, 200, 5, text$, Len(text$));
ReleaseDC_(hWin, MyDC);
Repeat : Until GetAsyncKeyState_(#VK_ESCAPE)
InvalidateRect_(hWin,0,1)
; weitere Möglichkeiten
; - haben aber nichts mit "Auf Desktop zeichnen" zu tun - glaube ich
hDesktop=GetDesktopWindow_();
Debug hDesktop
hDesktop=FindWindowEx_(hDesktop, 0, "Progman", "Program Manager");
Debug hDesktop
ShowScrollBar_(hDesktop,#SB_VERT,#True)
Delay(300);
InvalidateRect_(hWin,0,1)
Repeat : Until GetAsyncKeyState_(#VK_ESCAPE)
ShowScrollBar_(hDesktop,#SB_VERT,#False)
InvalidateRect_(hWin,0,1)
hDesktop=FindWindowEx_(hDesktop, 0, "SHELLDLL_DefView", 0);
Debug hDesktop
hDesktop=FindWindowEx_(hDesktop, 0, "SysListView32", 0);
Debug hDesktop
#LVM_GETTITEMCOUNT = $1000 + 4
Debug SendMessage_(hDesktop, #LVM_GETTITEMCOUNT, 0, 0) ;anzahl der desktop icons
SendMessage_(hDesktop,#LVM_SETTEXTCOLOR,0,RGB(255,0,0))
SendMessage_(hDesktop,#LVM_SETTEXTBKCOLOR,0,#CLR_NONE)
InvalidateRect_(hWin,0,1)
UpdateWindow_(hWin)
Repeat : Until GetAsyncKeyState_(#VK_ESCAPE)
SendMessage_(hDesktop,#LVM_SETTEXTCOLOR,0,RGB(255,255,255))
SendMessage_(hDesktop,#LVM_SETTEXTBKCOLOR,0,#CLR_NONE)
InvalidateRect_(hWin,0,1)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Schöne Zusammenstellung
Hab garnicht dran gedacht, das der Desktop ja auch nur ein ListView ist und
man diesen dann auch so behandeln kann.

Hab garnicht dran gedacht, das der Desktop ja auch nur ein ListView ist und
man diesen dann auch so behandeln kann.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
