Fenster immer im Vordergrund halten
-
Hallo zusammen!
Ich kämpfe zur Zeit mit einem Problem, und zwar: ich möchte einem Fenster zur Laufzeit die Eigenschaft mitgeben, immer im Vordergrund zu stehen. Dazu gibt es einen Window Style WS_EX_TOPMOST. Wen ich ihn beim erstellen des Fensters setze, dann funktioniert es:
[code] BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; cs.dwExStyle &= ~WS_EX_CLIENTEDGE; cs.lpszClass = AfxRegisterWndClass(0); cs.dwExStyle |= WS_EX_TOPMOST; return TRUE; } [/code]
Wenn ich aber versuche, zur Laufzeit den Style zu setzen mit ModifyStyleEx(NULL, WS_EX_TOPMOST), hat das keinerlei Wirkung. Auch SetWindowLong(...) scheint dabei nicht zu funktionieren.
Was mache ich falsch?
Danke
-
Ich denke das ModifyStyleEx() und SetWindowLong() einfach die falschen Funktionen sind. Versuchs mal mit SetWindowPos()
Gruß
:: NoName ::
-
void CVokabeltraineraDlg::StayOnTop() { CRect rect; // get the current window size and position GetWindowRect( rect ); // now change the size, position, and Z order // of the window. ::SetWindowPos(m_hWnd , // handle to window HWND_TOPMOST, // placement-order handle rect.left, // horizontal position rect.top, // vertical position rect.Width(), // width rect.Height(), // height SWP_SHOWWINDOW); // window-positioning options); }
Dann musst de ddann nur an der Stelle wo du es haben willst die Funktion StayOnTop();
So hab ich es versucht, und es hat wunderbar funktioniert.
-
Danke, (D)Evil, es klappt!
-
ich hab das auch mal probiert, aber ich krieg immer folgende Fehler:
...test7Dlg.cpp(214) : error C2039: 'StayOnTop' : Ist kein Element von 'CTest7Dlg'
c:\programme\microsoft visual studio\myprojects\test7\test7dlg.h(14) : Siehe Deklaration von 'CTest7Dlg'
...test7Dlg.cpp(219) : error C2660: 'GetWindowRect' : Funktion akzeptiert keine 1 Parameter
...test7Dlg.cpp(222) : error C2065: 'm_hWnd' : nichtdeklarierter Bezeichner
Fehler beim Ausführen von cl.exe.
-
Ok, wenn de in der MSDN nach guckst, siehst du, das der m_hWnd Handler ein standart Handler derr Klasse CWnd ist, also müsste der schon deklariert sein.
Und hast du die Funktion StyOnTop über add member function eingefügt? Also als Funktions Type: void
Funktions Decleration: StayOnTop
-
kannst du mal bitte genau sagen, was ich machen muss, bevor ich den diesen Quellcode einfügen kann?
ich hab das jetzt genau so eingefügt wie es oben stand, nur mit
void CTestDlg::StayOnTop()
statt
void CVokabeltraineraDlg::StayOnTop()
-
Füge einfach in der Header [ -> CDeineKlasseDlg.h ] die Funktion ein:
void StayOnTop();
Bei public oder private ...
Gruß
:: NoName ::
-
Genau, oder per assi.
-
ok, danke, es klappt