Fensterposition begrenzen

Zurück Zum Inhaltsverzeichnis Weiter

Während des Verschiebens eines Fenster sendet WINDOWS die Nachricht WM_MOVING an das entsprechende Fenster. Durch Verarbeiten dieser Nachricht innerhalb des MFC-Nachrichtenbearbeites OnMoving(...) kann die 'Bewegungsfreiheit' eines Fenster eingeschränkt werden. Diese Methode erhält unter anderen die neue, gewünschte Position des Fensters übergeben. Durch Überschreiben dieser Positionsdaten kann das Fenster dann in seiner Bewegungsfreiheit eingeschränkt werden.

void CMainFrame::OnMoving(UINT fwSide, LPRECT pRect)
{
    CFrameWnd::OnMoving(fwSide, pRect);
   
    // TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen
    // Fuer horiz. Einschraenkungen immer linke Kante begrenzen
    if (pRect->left < nMinLeft)
    {
        pRect->left = nMinLeft;
        pRect->right = nMinLeft+nWidth;
    }
    if (pRect->left > nMaxLeft)
    {
        pRect->left = nMaxLeft;
        pRect->right = nMaxLeft+nWidth;
    }
    // Fuer vertikale Einschraenkungen immer obere Kante begrenzen
    if (pRect->top < nMinTop)
    {
        pRect->top = nMinTop;
        pRect->bottom = nMinTop+nHeight;
    }
    if (pRect->top > nMaxTop)
    {
        pRect->top = nMaxTop;
        pRect->bottom = nMaxTop+nHeight;
    }
}

Im Beispiel wird die Position der linken Kante des Fenster auf den Bereich nMinLeft...nMaxLeft und der oberen Kante auf nMinTop...nMaxTop begrenzt. Beachten Sie bitte, dass Sie beim Einschränken der horizontalen Bewegungsfreiheit immer die beiden Strukturelemente left und right setzen müssen. Tun Sie dies nicht, so wird das Tracking-Rechteck (der gestrichelte Rahmen beim Verschieben des Fensters) nicht richtig angezeigt. Sie können dies austesten, indem Sie im obigen Listing z.B. einmal die Berechnung des Elements right auskommentieren und das Fenster dann horizontal verschieben. Das Gleiche gilt auch für die beiden Elemente top und bottom der RECT-Struktur beim Einschränken der vertikalen Position.

Das fertige Beispiel hierzu finden Sie unter 03EPMMFC\MoveWnd.

Zurück Zum Inhaltsverzeichnis Weiter


Copyright © 2004

Senden Sie Emails mit Fragen oder Kommentaren zu dieser Website an: mailto:info@cpp-tutor.de
 Wolfgang Schröder, Lerchenweg 23, D-72805 Lichtenstein. Tel: +49 7129 6470