Größe eines Steuerelement ermitteln



  • Moin moin,

    gibt es in der MFC eigentlich auch die Möglichkeit für ein
    bestimmtes Control die aktuelle Größe zu ermitteln?

    Ich möchte ein MFC-Programm erstellen und muss dort die Größe
    eines dargestellten Bitmap innerhalb eines Picturecontrol in
    Erfahrung bringen.



  • CRect rcSize;
    CWnd* pWnd = GetDlgItem(.......);
    pWnd->GetClientRect(&rcSize);
    

    Referenz:
    CWnd::GetClientRect



  • Joa, danke. Das hilft. 👍



  • Nun habe ich die Größe ermittelt, möchte aber auch ganz gerne wissen
    wo sich die Maus auf dem Bild nun genau befindet. Ich brauche also jetzt für
    die ermittelte Größe des Control die relative Koordinate der Maus
    innerhalb des Control.

    Kann man das ermitteln, oder geht das nur auf den gesamten Dialog?

    Ich habe es mal ansatzweise versucht, bekomme das ja aber nur für den
    Dialog.

    POINT pt; 
    GetCursorPos(&pt); 
    int xwert;
    int ywert;
    xwert=pt.x;
    ywert=pt.y;
    


  • ClientToScreen ?! Oder leite eine Klasse von dem Ctrl ab und mach das darin... da sind beide Koordinaten innerhalb des Ctrls...



  • Îch habe mir jetzt mal ClientToScreen angesehen, aber bin mir
    nicht sicher wie ich das nun auf mein Control anwenden kann.

    Sorry, dass ich erst so wenig Erfahrung in der Programmierung habe,
    das macht es mir nicht immer leicht alles sofort richtig zu verstehen 😞



  • Achja... sry... man ich muss mal wieder schlafen 😉

    Also.. leite einfach ne Klasse vom Ctrl ab... das geht am einfachsten 😉 Oder wenn ich morgen wieder da bin fällt mir evt. auch was anderes ein 😃



  • Ja, also würd mir ja schon helfen zu wissen was ich nun mit der abgeleiteten Klasse anfange??
    Ich will ja nur wissen wo innerhalb des Control sich die Maus befindet.

    Zum Hintergrund:

    Ich bestimme anhand der Größe des Picturecontrol wie ich das auf eine
    Bildschirmauflösung vo 1024x768 etc. umrechnen muss. Nun soll auch die
    Mausposition relativ umgesetzt werden. Und das ist eben einfacher da von einer
    festen Basis (dem Pictureconrol) ausgehen zu können.

    Z.B. das Control ist h=480 b=325. Nun ist das auf 1024x768 bezogen, wenn ich an der Mausposition 100,100 bin dann umgesetzt = 160,315.

    Oder get das noch einfacher 🙄



  • siehe als konkretes Beispiel:
    http://www.codeproject.com/buttonctrl/FooButton.asp

    aus FooButton.cpp:

    //! Checks if the mouse was clicked on multi part of button.
    void FooButton::multiHitTest (CPoint pt)
    {
      // Reset multi-clicked state
      m_bMultiClicked = false;
      if (!m_bMulti)
         return;
    
      // Get bounds of multi part of button
      CRect rect;
      GetWindowRect (rect);
      rect.left = rect.right - 2*C_DropDown_X + 2;
    
      // Check if mouse was clicked on multi part of button
      ClientToScreen (&pt);
      if (rect.PtInRect (pt))
         m_bMultiClicked = true;
    }
    

Anmelden zum Antworten