Avatar billede dyrby Nybegynder
25. september 2000 - 13:56 Der er 18 kommentarer og
1 løsning

Hvordan får jeg mit program i focus

Programmet er minimeret og ligger i baggunden. Programmet skal ved en bestemt begivenhed åbne et dialogvindue som skal være i focus / være aktivt. Hvordan gør jeg det??
Det samme vindue skal kunne sættes til ikke at have focus i andre situationer.
Jeg har prøvet: SetFocus(), SetActiveWindow(), mm. men lortet dur ikke :( Kan nogen hjælpe mig
Avatar billede borrisholt Novice
25. september 2000 - 14:58 #1
prøv funktionen  SetWindowPos()

Fra online hjælpen :

The SetWindowPos function changes the size, position, and Z order of a child, pop-up, or top-level window. Child, pop-up, and top-level windows are ordered according to their appearance on the screen. The topmost window receives the highest rank and is the first window in the Z order.


Kan i C-builder kaldes således :

SetWindowPos(Application->Handle,HWND_TOPMOST    ,0,0,0,0,SWP_SHOWWINDOW);


jens B
Avatar billede dyrby Nybegynder
25. september 2000 - 15:19 #2
Desværre. Tak for ulejligheden men den dur ikke... (Har prøvet)
Avatar billede jinxed Nybegynder
25. september 2000 - 16:01 #3
prøv med BringWindowToTop(HWND hWnd);

Jinxed ; ]
Avatar billede dyrby Nybegynder
25. september 2000 - 16:29 #4
Desværre. dur ikke næste sagde prinsessen :), nej... det API kald dur nogenlunde...  problemet er at hovedvinduet kommer frem. Det ville være ønskeligt at kun dialogen bliver vist. hvis ikke der kommer andre skal du nok få pointene
Avatar billede nolle_k Nybegynder
25. september 2000 - 22:55 #5
Hvis du laver dialogen Modal, det vil sige at det ikke kan lade sig gøre at foretage sig andet før end at der er trykket OK eller cancel eller dialogen er lukket på anden måde! Dette skulle løse problemet, hvis du vel og mærke ikke har prøvet dette før!
Avatar billede dyrby Nybegynder
26. september 2000 - 09:46 #6
Nej jeg kan ikke bruge modal... da det stadig skal være muligt at bruge resten af programmet selv om dialogen bliver vist. Det er klart at dialogen ikke kan være i focus samtidigt, men det er også ok, bare dialogen kommer i focus når den først kommer frem.
Avatar billede borrisholt Novice
26. september 2000 - 13:14 #7
BringWindowToTop() og SetForeGroundWindow() virker hvis de bliver kaldt rigtigt ! Hvis dir hoved vindue dukker frem er det fordi du giver et forkert handle til funktionen !

\"Desværre. dur ikke næste sagde prinsessen :)\" Så hvem der ikke dur er svær at afgøre ...

jens B

Avatar billede borrisholt Novice
26. september 2000 - 13:26 #8
Anyway du skal have fat i det Windows Handle der knytter sig til dit dialog vindue ....

jens B
Avatar billede dyrby Nybegynder
26. september 2000 - 13:28 #9
>>borrisholt
Er du sur?
Hvis du kommer med en lidt mere fylstgørende ville jeg blive glad :)
Avatar billede borrisholt Novice
26. september 2000 - 13:31 #10
Jeg er ikke su ... bare sarkastisk ... jeg går lige til frokost så kommer jeg med er bedere svar ...

:o)
jens B
Avatar billede dyrby Nybegynder
26. september 2000 - 13:39 #11
Jeg har muligvis misforstået noget Jens?
SetForeGroundWindow() dur helt efter hensigten bortset fra at når et dialogvindue/child vindue bliver kaldt kommer hovedvinduet også frem! (i bagrunden for dialogen, men foran alt andet).
Jeg har mistanke om at man ikke kan ungå det, fordi det netop er et child vindue...?
Avatar billede borrisholt Novice
26. september 2000 - 14:03 #12
hvis du ikke har handlet til vinduet, du ønsker at manipulere med kan du bruge FindWindow() til at få fat i det med du ved HWND h = FindWindow(NULL, \"HEST\");

FindWindow kan godt være svær at bruge fordi den skal kalder temmelig, for ikke at sige 100% nøjagtigt ... Derfor har jeg laver en wrapper uden omden der hedder FindWindowLike (kan downloades fra http://borrisholt.com, under WIN32API), den kan hjælpe dig på vej med klassenavne etc. Kalsse nacnet kan nemlig godt ændresig på runtime i forhold til Designtime... Altså med andre ord fordi den klasse der definerer dit vindue hedder WindowsPruHest, behøver den nødvendigvis ikke også at hede det i den kompilerede fil .... Det kan du bruge FindWindowLike til at tracke down .....

Håber det her hjælper dig ...

jens B
Avatar billede dyrby Nybegynder
26. september 2000 - 14:18 #13
Det er ikke noget problem at få vindue handlen. Jeg bruger MFC, så jeg har en CDialog som nedarver fra CWnd, og i denne klasse er disse funktioner. Jeg går stærkt ud fra, at de bruger den rigtige vindue handle.
Avatar billede lbs Nybegynder
28. september 2000 - 13:22 #14
SetForegroundWindow(hwnd);


hvor hwnd er dit vindue handle...
skulle gerne virke, det gjorde det for mig.
Avatar billede lbs Nybegynder
28. september 2000 - 13:23 #15
Det er dog ikke mfc...
Avatar billede dyrby Nybegynder
28. september 2000 - 13:31 #16
>>lbs
samme problem som forklaret i
Kommentar fra dyrby 
26-09 2000 13:39:28
men tak alligevel.
Avatar billede dyrby Nybegynder
28. september 2000 - 13:36 #17
Jeg tror ikke der kommer et brugbart svar... men hvis borrisholt vil svare igen.. får han pointene uanset hvad, da det er ham der har ofret mest energi.
Avatar billede borrisholt Novice
28. september 2000 - 13:39 #18
Jammen så siger jeg tak til.
Avatar billede borrisholt Novice
28. september 2000 - 13:43 #19
måske du skulle kigge på  den der FindWindowLike() funktion fra min hjemme side måske du kan bruge den en anden god gang ....


Jens B
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