SetWindowPos MoveWindow



  • Wenn ich SetWindowPos MoveWindow auf einen Handler einer Anwendung anwende funktionierts prima ... möchte ich jedoch etwa einen Button verschieben, geht das nicht ... er verschwindet einfach ... nur warum?

    Liebe Grüße



  • Vielleicht weil du falsche Koordinaten angibst?
    Die beiden Funktionen interpretieren die Koordinaten relativ zur oberen linken Ecke des Parent Fensters - wenn du z.B. Screen Koordinaten übergibst kanns leicht sein dass du den Button dadurch aus dem Client Bereich des Fensters raus bewegst, und dann "verschwindet er".

    BTW: es heisst Handle, ein Handler ist ganz was anderes. ("Handler" nennt man Funktionen wie "OnPaint" o.ä., also Funktionen die eine bestimmte Nachricht "behandeln" bzw. auf ein bestimmter Ereignis "reagieren".)


  • Mod

    @_Mazze: Die muss klar sein, dass es Wndows Koordinaten gibt und Client Koordinaten. Die Koordinaten zum Verschieben für den Button musst Du in Client Koordinaten, also relativ zum Parent angeben!



  • Hmm ... hätt ich auch selbst drauf kommen müssen 🙂 Danke!

    Breite und Höhe lässt sich nun wunderbar ändern.
    Aber die Position spinnt immer noch - es stimmt nur bei jeder 2. Änderung - verstehe nict warum

    RECT rc, parrc;
    
       if (GetWindowRgn(hWnd,&rc && GetWindowRgn(parhWnd,&parrc))
          MoveWindow(hWnd, StrToInt(CSpinEdit1->Text)-parrc.left, rc.top-parrc.top, rc.bottom-rc.top, rc.right-rc.left, true);
    


  • Sagmal wie übergibst Du denn GetWindowRgn ne RECT-Struktur ? Gehört da ne höhere Kraft zu 😃 ?



  • bis auf das ich da ne Klammer vergessen hab, funktioniert das ganz gut! auch ohne höhere Kraft 🙂


  • Mod

    Und warum bitte verwendest Du eine region und nicht GetWindowRect oder GetClientRect?



  • _Mazze schrieb:

    bis auf das ich da ne Klammer vergessen hab, funktioniert das ganz gut! auch ohne höhere Kraft 🙂

    Dann haste Glück, dass das intern hinkommt. Ich schließe mich Martin an 😉 .



  • grrr ich Idiot!

    if (GetWindowRgn(hWnd,&rc && GetWindowRgn(parhWnd,&parrc))
    MoveWindow(hWnd, StrToInt(CSpinEdit1->Text)-parrc.left, rc.top-parrc.top, rc.bottom-rc.top, rc.right-rc.left, true);


Anmelden zum Antworten