ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
4838
4838
EMPFEHLEN
-
Hallo,
Wenn ich ein Fenster unter Windows erstelle, kann ich nur die absoluten Maße angeben. Der Clienbereich hat aber dann nicht die richtige Größe. Sind die Maße der Fensterränder immer gleich, oder sind die unterschiedlich? Wie kann ich diese auslesen?
-
01.05.04 19:05 #2
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Es ist tatsächlich nicht ganz einfach, ein Fenster so gross zu machen, dass der resultierende Clientbereich exakt eine vorgebene Grösse hat. Erstens sind da natürlich Titel und Rahmen, aber was erschwerend noch dazukommt sind eventuell Menüsleisten, Statusbalken und -- ganz übel -- Scrollbalken.
Ich habe mir mal folgende Routine gebastelt, die auch tatsächlich
funktioniert:Das habe ich mit MFC gemacht - ich denke aber, dass es die entsprechenden Funktionen auch als Nicht-Methoden in der WinAPI gibt. Meine Routine funktioniert übrigens für Framewindows. Falls du das nicht brauchst, kannst du den Kram mit GetParent() weglassen (es wird das Fenster selbst geändert) und auch RecalcLayout() fällt weg.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
void CMeinView::SetSize( int width, int height ) { int counter = 0; //- nur 5 Versuche! CRect rectMain, rectClient; for ( GetClientRect( rectClient ); ( counter < 5 ) && ( rectClient.Width() != width || rectClient.Height() != height ); ++counter, GetClientRect( rectClient ) ) { TRACE( "rectClient: %d, %d\n", rectClient.Width(), rectClient.Height() ); GetParent()->GetWindowRect( rectMain ); int borderwidth = rectMain.Width() - rectClient.Width(); int borderheight = rectMain.Height() - rectClient.Height(); GetParent()->MoveWindow( rectMain.left, rectMain.top, width + borderwidth, height + borderheight ); ((CFrameWnd*)GetParent())->RecalcLayout(); } }
Hilft dir das weiter?Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Es gibt auch die Win32-Methode AdjustWindowRect(Ex), die je nach BOOL die zugehörige Client/Window-Size ausrechnet. Die berücksichtigt aber dummerweise keine umgeklappten Menüs und Scrollbars.
Die funktioniert allerdings auch ohne HWND. Wenn das Fenster bereits existiert, ist's wohl besser, die Funktion von Kachelator zu nehmen, die geht auf Nummer sicher.
-
01.05.04 20:38 #4
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Cool. Die habe ich noch nie benutzt. Muss ich mir merken.AdjustWindowRect
Wann hat das Gelerne eigentlich mal ein Ende? *Haare rauf*
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
hm ich versteh nicht recht wie man die funktion benutzt!
kannst du des mir mal genau erklären mit parameter etc.
-
02.05.04 07:19 #6
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Versuch es mal so:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
RECT rect; // gewünschte linke obere Ecke von Clientarea rect.left = 100; rect.top = 100; // gewünschte rechte untere Ecke von Clientarea rect.right = 200; rect.bottom = 200; // welchen Style hat das Fenster? DWORD dwStyle = WS_OVERLAPPED; // hat es ein Menü? BOOL bMenu = FALSE; int iResult = AdjustWindowRect( &rect, dwStyle, bMenu ); if ( iResult == 0 ) { // hat nicht geklappt MessageBox( 0, "Fehler bei AdjustWindowRect()", "Au ha!", MB_ICONERROR ); } else { // rect enthält jetzt die benötigte Fenstergrösse und kann zum Positionieren verwendet werden SetWindowPos( hwndVonMeinemFenster, 0, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER ); }Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
also bei mir will die methode garnicht funktionieren!
-
02.05.04 12:14 #8
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Könntest du eventuell mal deinen Code posten?
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Ist zwar lange her, aber es muss trotzdem mal gesagt werden:
Sowas macht man mit GetSystemMetrics().
Daran ist überhaupt nichts kompliziert.
lg Max
-
Nicht? Du mußt dir alle Bordertypen je nach Style raussuchen und aufaddieren, die Caption, falls vorhanden, das Menü, falls vorhanden.
Und alles das kannst du mit einem Aufruf per AdjustWindowRect(Ex) erledigen.
Warum das Rad neu erfinden, runder wird es nicht.
Ähnliche Themen
-
BufferedImage an Fenstergröße anpassen
Von Wassermelone im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 01.02.10, 00:13 -
Fenstergröße an Bild anpassen
Von d-braun im Forum Javascript & AjaxAntworten: 9Letzter Beitrag: 26.07.06, 01:13 -
GridLayout an Fenstergröße anpassen
Von sjostjerna im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 07.10.05, 11:45 -
Hintergrundbild an Fenstergröße anpassen
Von Riegel im Forum HTML & XHTMLAntworten: 4Letzter Beitrag: 20.05.05, 16:56 -
Fenstergröße anpassen
Von uwee im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 14.01.05, 13:34





Zitieren
Login






