Avatar billede ladyhawke Novice
21. september 2004 - 14:21 Der er 17 kommentarer og
2 løsninger

Set desktop cursor Visual C++/MFC

Hvordan kan jeg sætte en cursor for desktop i mit program?
Jeg har en længerevarende operation som ikke viser nogen brugergrænseflade, derfor vil jeg gerne sætte wait cursor for desktoppen imens...
Avatar billede jpk Nybegynder
21. september 2004 - 14:26 #1
Ex:

CWaitCursor wait;
Avatar billede jpk Nybegynder
21. september 2004 - 14:27 #2
Viser en wait cursor indtil den unwind'es af stack'en
Avatar billede ladyhawke Novice
21. september 2004 - 14:35 #3
nej ikke for desktop (ikke hos mig i hvert fald), problemet er den manglende brugergrænseflade, så jeg går ud fra at jeg skal have fat i et handle til desktop og sætte curseren via den, jeg ved bare ikke hvordan
Avatar billede jpk Nybegynder
21. september 2004 - 14:43 #4
Du kan sagtens få fat i desktoppen (GetDesktopWindow), men om det er den rigtige måde at gøre det på ved jeg ikke... Desktoppen er jo ikke egentlig "optaget", så den skal vel heller ikke vise et wait icon?
Avatar billede jpk Nybegynder
21. september 2004 - 14:45 #5
Du kan heller ikke være garanteret at den ikke selv (eller et andet program) ændrer ikonet igen!
Avatar billede ladyhawke Novice
21. september 2004 - 14:57 #6
nej det er jeg med på, men jeg har prøvet med CWaitCursor og det virker overhovedet ikke...
Avatar billede jpk Nybegynder
21. september 2004 - 15:10 #7
Hvad med at vise en lille dialog, evt. med progress, så man kan se at det er dit program der er optaget og ikke Windows?
Avatar billede ladyhawke Novice
21. september 2004 - 15:35 #8
risikerer at låse tråden, det er bare en indikator, og den er nødt til at vises på desktop, fordi jeg har ingen anden brugergrænseflade at vise den på, det er bare for at vise at maskinen er igang med en operation
Avatar billede ladyhawke Novice
22. september 2004 - 12:02 #9
Håber der er nogen der har andre ideer til spørgsmålet, for som sagt vil CWaitCursor ikke vises, hvis din brugergrænseflade er skjult. Od det er rigtigt at det giver nye problematikker, men kan man overhovedet sætte cursoren for hele desktop?
Avatar billede jpk Nybegynder
22. september 2004 - 12:36 #10
Jeg er ikke med på hvad mener med "risikerer at låse tråden"?

Du kan muligvis godt sætte cursoren, men du når nok aldrig at opdage det, fordi den bliver ændret tilbage med det samme!
Avatar billede ladyhawke Novice
22. september 2004 - 13:24 #11
hvis du sætter den for desktop og ikke et vindue? Og tråden jeg tænker på er den gui tråd som skal håndtere at vise en dialog, mens programmet kører...
Avatar billede jpk Nybegynder
22. september 2004 - 13:56 #12
Hvis du sætter cursoren for et vindue du ikke selv ejer, men som bliver opdateret af en anden process, så kan du ikke regne med at den forbliver som du har sat den!

Det er det samme som at ændre caption i et vindue i en anden process, det er sandsynligvis kun midlertidigt...

Men hvorfor skulle du risikere at låse den tråd der håndterer opdatering af et progress vindue?

Hvis du absolut ikke vil vise andet end en wait cursor, kan du lave et usynligt fullscreen vindue og sætte cursoren for det, men ikke en anbefalelsesværdig løsning!
Avatar billede ladyhawke Novice
22. september 2004 - 14:22 #13
jeg er klar over at uanset hvilke løsning jeg vælger so vil det være problematisk, jeg skal lige spekulere lidt over det...
Avatar billede ladyhawke Novice
07. oktober 2004 - 11:00 #14
Jeg har endnu ikke fundet anden løsning, men eftersom min oprindelige ide og jpk's er sammenfaldende vil jeg gerne dele point, så hvis du vil lægge et svar igen?
Avatar billede jpk Nybegynder
07. oktober 2004 - 11:49 #15
Mit oprindelige svar med CWaitCursor fortjener ikke at blive accepteret, det var udfra den forudsætning at du ville ændre cursoren i dut eget program, ikke desktoppen.

Jeg mener dog stadig, at det ikke er en god løsning at ændre desktoppens cursor, da det ikke er en resource der hører til dit program.

Det kunne muligvis lade sig gøre ved at lave en separat dll og loade ind i processen der ejer desktoppen, den kunne så lave et message hook og sørge for at cursoren ikke ændres. Men alt i alt en forfærdenlig løsning!!!

Hvis du absolut vil vise et timeglas over desktoppen tror jeg det nemmeste er, at lave et fullscreen vindue, der er gennemsigtigt, og sætte cursoren for det.
Jeg har dog ikke afprøvet denne mulighed og ved derfor ikke om det vil virke...

Endelig er der jo muligheden for at vise en mindre dialog med en tekst og evt. en progress bar. Du kan bruge Create  (ikke DoModal) til at vise dialogen med, så "låser" den ikke tråden.
Avatar billede ladyhawke Novice
07. oktober 2004 - 11:54 #16
tror også sidstnævnte version er den eneste nogenlunde løsning jeg kan kommepå, problemet er at brugeren ikke kan se nogen som helst reaktion fra programmet mens operationen kører, og den kan tage adskillige minutter på ældre maskiner.
Jeg vil nu stadig godt dele point...
Avatar billede jpk Nybegynder
07. oktober 2004 - 12:04 #17
okay, så takker jeg...
Avatar billede jpk Nybegynder
07. oktober 2004 - 12:05 #18
Hvis du har brug for hjælp mht. progress dialog, må du bare sige til...
Avatar billede ladyhawke Novice
07. oktober 2004 - 12:19 #19
det finde jeg ud af, skal nok sige til i så fald :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester