Dialog -> "Always on Top"
-
Moin.
Ich habe in meiner WinCE Anwendung einen Dialog, welcher auch dann noch angezeigt werden soll, wenn ein Dialog im Hintergrund angeklickt wird.
Denke das ist ja auch die Definition von "Always on Top".
So habe ich es versucht, aber es funktioniert nicht. Was mache ich falsch?
BOOL CDialogMessage::OnInitDialog() { int Ret; CDialog::OnInitDialog(); //--- Always on Top Ret = SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); //Ret = ::SetWindowPos(this->GetSafeHwnd(),HWND_TOPMOST ,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); return TRUE; // return TRUE unless you set the focus to a control // AUSNAHME: OCX-Eigenschaftenseite muss FALSE zurückgeben. }
-
Hi
Du musst auch dafuer sorgen, dass in deiner Dialog-Ressource der EXSTYLE das WS_EX_TOPMOST Flag enthaelt.
Wenn du die Dialog-Ressource im Ressource Editor erstellst, findest du das bei den Eigenschaften das Dialogs unter "Darstellung/Topmost", das musst du auf True setzen.
Zur Laufzeit kann man das so aendern.
LONG exstyle = ::GetWindowLong( m_hWnd, GWL_EXSTYLE); exstyle |= WS_EX_TOPMOST; ::SetWindowLong( m_hWnd, GWL_EXSTYLE, exstyle);
PantaRhei
-
Hi, erstmal vielen Dank für Deine Antwort.
PantaRhei schrieb:
Hi
Du musst auch dafuer sorgen, dass in deiner Dialog-Ressource der EXSTYLE das WS_EX_TOPMOST Flag enthaelt.
Wenn du die Dialog-Ressource im Ressource Editor erstellst, findest du das bei den Eigenschaften das Dialogs unter "Darstellung/Topmost", das musst du auf True setzen.
Ich habe die Dialog Ressource in der Ressourcen Ansicht erstellt. Nur sehe ich bei mir unter Eigenschaften des Dialogs "Darstellung/Topmost" nicht.
Hier ein Screenshot:
http://img291.imageshack.us/img291/3117/eigenschaften.pngPantaRhei schrieb:
Zur Laufzeit kann man das so aendern.
LONG exstyle = ::GetWindowLong( m_hWnd, GWL_EXSTYLE); exstyle |= WS_EX_TOPMOST; ::SetWindowLong( m_hWnd, GWL_EXSTYLE, exstyle);
PantaRhei
Den Code habe ich bei mir auch mal unter OnInitDialog hinzugefügt. Leider scheint das auch keine Wirkung zu haben
-
Versuch mal die Ressourcedatei (*.rc) direkt zu editieren, muesste dann z.B. so aussehen:
IDD_DIALOG1 DIALOGEX 0, 0, 316, 184 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_TOPMOST CAPTION "Dialog" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "OK",IDOK,205,163,50,14 PUSHBUTTON "Abbrechen",IDCANCEL,259,163,50,14 END
Wie gesagt, die Zeile "...EXSTYLE WS_EX_TOPMOST..." ist wichtig.
-
Also es sieht jetzt so aus:
IDD_DIALOG_BURN_MESSAGE DIALOG 0, 243, 182, 54 STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_SYSMENU EXSTYLE WS_EX_TOPMOST FONT 8, "MS Shell Dlg" BEGIN END
Ist das richtig?
So funktioniert es bei mir leider auch nicht.
Muss man bei WinCE vielleicht etwas beachten?
-
Tja, es koennte an CE selbst liegen. Hab mal ein Testprojekt fuer CE erstellt und konnte im Ressourcen-Editor auch nur das einstellen, was bei dir sichtbar war. Aber ursprueglich stand in den About-Dialogen dies:
IDD_ABOUTBOX DIALOG 0, 0, 156, 129 STYLE DS_SETFONT | DS_SETFOREGROUND | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMODAL EXSTYLE 0x80000000L ...
Ich habe WS_EX_TOPMOST dazu addiert, also so:
... EXSTYLE WS_EX_TOPMOST | 0x80000000L ...
Und schon bin ich mit meiner Weisheit am Ende.