Dialogfenster verschieben funktioniert nicht richtig ;-((((



  • Hi Leute,
    ich habe folgendes Problem. Ich habe 2 Dialogfelder. Ein modales Hauptdialogfeld und ein weiteres nicht modales. Jetzt möchte ich das nicht modale links neben dem modalen platzieren und ihm dieselbe Höhe zuweisen.
    Ich hab das mal folgendermaßen versucht (m_dlgPaint ist die Variable der Klasse des nicht-modalen Fensters):

    .......
            .......
        int iHeight = 0;
    
        m_dlgPaint.Create(IDD_PAINT_DLG,this);
        CRect lRect;
        GetClientRect(lRect);
        iHeight = lRect.Height();
        ClientToScreen(lRect);
        m_dlgPaint.SetWindowPos(this,(lRect.left - 400),lRect.top,400,iHeight,NULL);
        m_dlgPaint.ShowWindow(SW_SHOW);
    
        UpdateData(FALSE);
    

    Das ganze steht in OnInitDialog des Hauptfensters. Wenn ich dies nun ausführe, sitzt mein nicht-modales Fenster links oben. Der rechte Rand ist da, wo der Bildschirm seinen linken hat. Ich habe auch mal die Koordinaten ausgeben lassen. (lRect.left,lRect.top) = (3,22).
    Ich hab keine Ahnung, was ich falsch gemacht habe. 😕

    Danke im Voraus

    mfg takeiteasy



  • *push*

    Hat denn keiner eine Ahnung ????
    oder einen Hinweis, was falsch sein könnte ???

    mfg takeiteasy



  • @takeiteasy

    So rein von der Logik her kann dann der Fehler eigentlich nur am GetClientRect() liegen (IMHO)... oder Ich habe Ihn jetzt auch übersehen 😮

    Nimm doch anstelle der GetClientRect() / ClientToScreen() Geschichte die Funktion GetWindowRect() damit erhälst Du die Position gleich in Screen-Koordinaten !!!

    Vielleicht hilft Dir das ja weiter...

    MfG veganza

    [ Dieser Beitrag wurde am 26.12.2002 um 21:54 Uhr von veganza editiert. ]



  • also wenn mich net alles täuscht, müsttest du ScreenToClient() anstatt ClientToScreen() Nehmen



  • Hi,
    danke erstmal für eure Antworten.
    Es funktioniert leider auch dann nicht.
    GetWindowRect() liefert mir ein Rechteck, welches so groß ist wie der Bildschirm. Ich brauche aber die linke obere Ecke des modalen Dialogfensters in Screen Koordinaten.

    Wenn ich ScreenToClient() benutze, erhalte ich negative Werte für die Position.

    Ich habe auch versucht, das ganze mit einem Punkt zu machen, aber das ging auch daneben ;-(((

    Also, irgendwie programmiere ich doch da einen rechten Scheiss zusammen oder ? Ich meine, eigentlich müssten die Koordinaten eines Punktes, z.B. (0.0) durch ClientToScreen ja in die Screen-Koordinaten umgewandelt werden, also von mir aus (100.50) oder sowas in der Art. Ist diese Überlegung überhaupt richtig soweit ????
    Wenn nicht, wie bekomme ich es dann hin, die verdammte linke obere Ecke meines Dialogfensters in Screen-Koordinaten zu erhalten 😕

    Ich verzweifel bald 😞

    mfg takeiteasy

    PS: Wär nett, wenn mir einer helfen könnte.

    PPS: Ich hab des jetzt auch schon in einer komplett neuen Anwendung probiert und es ist genau der gleiche Mist 😡



  • Versuchs mal mit m_dlgPaint.MoveWindow(); und dann noch ein m_dlgPaint.Invalidate();



  • Hi,
    ich hab mein Problem endlich gelöst 😃
    Ich Idiot hab das ganze in OnInitDialog gemacht !!!!!
    Dabei kann das ja garnicht gehen, weil das Fenster noch garnicht gezeichnet wurde !
    Danke trotzdem für eure Antworten.

    mfg takeiteasy


Anmelden zum Antworten