resize nur an einer Seite



  • Hi,

    z.B. im Windows Explorer gibts es ja links die Baumansicht und rechts werden die Dateien angezeigt. Zwischen den beiden Fenstern kann man die Größe ändern, sodass sich das Verhältnis ändert; oben, unten und am Rand kann man die Größe nicht ändern. Wie kann man das realisieren?



  • Mit Windows-Api Bordmitteln leider gar nicht.
    MFC bietet hier eine Klasse names CSplitterWnd.

    Die Lösung in purer Windows-API sähe so aus,
    dass man 3 Childfenster erstellt. Das erste als linken bereich, das zweite als rechten und der Trennbalken ist das 3. Fenster.
    Wenn die Maus über dem 3. Fenster liegt, wird der Mauscursor geändert und mit dem MouseDrag die Fenstergrößen und Positionen entsprechend angepasst.



  • Ok danke, dann mache ich das mit einem 3. Fenster!



  • Ich hab das jetzt mal versucht, habe dabei aber ein Problem. Ich bin so vorgegangen, dass ich wenn die linke Maustaste getrückt wird, ein SetCapture aufgerufen wird, bei WM_LBUTTONUP ReleaseCapture().
    Ich wollte das verschieben so realisieren, dass ich auf WM_MOUSEMOVE mit MoveWindow() reagiere. Das klappt so allerdings nicht, weil sich die Koordination in lParam von WM_MOUSEMOVE auf das Fenster beziehen.
    Wenn ihr micht nicht versteht, fragt nach 😉



  • Die Koordinaten kannst du doch einfach mit ClientToScreen umwandeln 😉



  • Stimmt, danke!
    Aber da muss es doch eine bessere Lösung geben, ich mache das momentan so:

    POINT pos;
    pos.x = LOWORD(lParam);
    pos.y = HIWORD(lParam);
    ClientToScreen(hWnd, &pos);
    ScreenToClient(hWndParent, &pos);
    MoveWindow(hWnd, pos.x,0, 5, 500, true);
    

    Ich brauche die Koordinaten ja nämlich relativ zum Hauptfenster meiner Anwendung!

    Das ist doch schon sehr umständlich, oder geht das nicht besser?



  • Also ich weiß jetzt nicht, was du an deinem Code so umständlich findest 🙄



  • Naja, ich rechne die Koordinaten ja 2 mal um, ein ClientToParent oder sowas wäre vielleicht besser, falls es sowas gäbe, dachte ich, aber wenn nicht, ist auch ok. Es funktioniert ja!


Anmelden zum Antworten