Fensterposition begrenzen
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.
|