25. september 2000 - 13:56Der 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
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.
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
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!
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.
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 ...
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...?
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 .....
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.
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.
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
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.