Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » wie kann ich ein Fenster im Vordergrund behalten?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.08.2002, 00:04 Uhr
~neuling
Gast


ich bräuchte ein Fenster das, solange bis es beendet wird, im Vordergrund bleibt und auch den Eingabefocus behält (also so das man, außer ALT-F4, nicht daran vorbeikommt),
die MSDN beschreibt zwar veschiedene Funktionen dafür, wie zB SetForegroundWindow( ), SetFocus( ), usw, die funktionieren aber so nicht...

Betriebsystem ist win98
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.08.2002, 12:17 Uhr
Christian
C/C++ Master
(Operator)


Hallo!

Um das zu erreichen musst du das Fenster mit:

C++:
CreateWindowEx(..)


erstellen. Als dwExStyle musst du auch WS_EX_TOPMOST angeben. (vgl. Beschreibung aus der MSDN)

C++:
WS_EX_TOPMOST Specifies that a window created with this style should be placed above all non-topmost windows and should stay above them, even when the window is deactivated. To add or remove this style, use the SetWindowPos function.



So bleibt das Fenster also sicher im Vordergrund. Aber um dafür zu sorgen, dass es immer den Fokus behält würde ich aber folgendes machen:
Ich würde als Hauptfenster einen Dialog nehmen und als Eigenschaft SystemModal angeben. Dann muss der Anwender erst den Dialog irgendwie schließen bevor er etwas anderes machen will. In wie fern die Eigenschaft systemmodal auch bei Fenstern funktioniert weiß ich leider nicht.

Grüße
Ich hoffe ich konnte helfen



Grüße
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.08.2002, 00:25 Uhr
~neuling
Gast


also mal danke, auf das systemmodal bin ich nicht gekommen...
aber es funktioniert nicht so ganz...

die Systemmodal-Eigenschaft allein hält es im Vordergrund (damit läßt sich die Vordergrund-Eigenschaft mit einem einzigen Klick an und ausschalten... keine Fummelei mit den Konstruktoren...)

aber den Fokus behält es nicht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.08.2002, 11:48 Uhr
Christian
C/C++ Master
(Operator)


Hi!

Naja, sonst kenne ich nur noch eine Methode, die ist aber total aufwendig. Du kannst dir einen Hook schreiben und alle Nachrichten, die deinem Fenster den Fokus wegnehmen wollen, niemlas ankommen lassen. Eine andere Möglichkeit ist mir nicht bekannt.
Weiß sonst noch jemand wie man das lösen könnte?

Grüße
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.08.2002, 14:08 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Wie wärs mit SetWindowLong?


C++:
SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_TOPMOST);



Das sollte das Fenster zur Laufzeit auf Topmost umschalten.
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.08.2002, 17:31 Uhr
~neuling
Gast


@Leif: also topmost reicht nicht, das sorgt nur dafür dass das Fenster alle anderen übermalt (soweit ich gesehen hab), aber es beeinflusst nicht den Fokus..



hm... das mit dem hook hört sich gut an,
äh, hast du davon eine ... 'Kürzest'-Demofassung?
(also einen hook hab ich noch nie probiert, ists sowas wie die CALLBACK-Funktionen an anderen Stellen?)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.08.2002, 19:25 Uhr
Christian
C/C++ Master
(Operator)


Hi!

Also einen guten Quellcode habe ich nicht. Aber du kannst um Downloadsbereich der Seite einmal schauen, da gibt es den Code eines Hook zum Downloaden. Die MSDN hilft bei dem Thema auch relativ gut.

Grüße
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.08.2002, 23:59 Uhr
~neuling
Gast


jö, es funktioniert...
Danke!


eine Kleinigkeit noch,
wie verhindere ich, dass die Tastendruck-Meldung an das gerade aktive Programm weitergereicht wird?
(sonst wird vielleicht im Hintergrund was anderes ausgelöst...)

ähh... und im Moment gelingts mir nicht so wie im Beispielprogramm, dass die Tastenmeldung in jedem Fall nur einmal ankommt, wenn das Fenster aktiv ist, kommt sie zweimal (obwohl ich KeyUp und KeyDown gelöscht hab) ; das kann man eh abfragen, aber interessieren würds mich doch wieso das bei mir nicht so geht...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: