21. september 2004 - 14:21Der 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...
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
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?
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
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?
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...
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!
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?
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.
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...
det finde jeg ud af, skal nok sige til i så fald :o)
Synes godt om
Ny brugerNybegynder
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.