Fenstergröße an ClientArea anpassen



  • Ich habe in einem Tutorial Code gefunden, wie ich die Fenstergröße meiner Anwendung an die ClientArea (den Zeichenbereich) anpasse. Dazu füge ich in meine C..View die Methode OnCreate mit folgendem Code ein:

    int C..View::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
       if(CView::OnCreate(lpCreateStruct)==-1) return -1;
       CRect ClientArea(mClientRect);
       CalcWindowRect(&ClientArea, CWnd::adjustOutside);
       GetParentFrame()->CalcWindowRect(&ClientArea, CWnd::adjustOutside);
       ClientArea.OffsetRect(-ClientArea.left, -ClientArea.top);
       ClientArea.bottom += GetSystemMetrics(SM_CYCAPTION);
       GetParentFrame()->SetWindowPos(NULL, 0, 0, ClientArea.right, ClientArea.bottom, SWP_NOZORDER|SWP_NOMOVE);
       return 0;
    }
    

    Wenn man dann aber mal ein Rechteck der Größe mClientRect zeichnet, sieht man, dass das der Zeichenbereich ein paar Pixel größer ist. Woran liegt das, wie kann ich das besser machen?



  • Ich habe es jetzt wie folgt gelöst:

    int C..View::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
       if(CView::OnCreate(lpCreateStruct)==-1) return -1;
       CRect ClientArea(mClientRect);
       GetParentFrame()->CalcWindowRect(&ClientArea, CWnd::adjustOutside);
       GetParentFrame()->MoveWindow(0, 0, ClientArea.Width(), ClientArea.Height()+GetSystemMetrics(SM_CYMENU));
       return 0;
    }
    

    Im obigen Code liefert mir scheinbar GetSystemMetrics(SM_CYCAPTION) einen zu großen Wert.


Anmelden zum Antworten