CButton Problem



  • hallo, ich bein ein ziemlicher mfc-neuling und stehe vor folgendem problem:

    ich möchte eine aktion ausführen (über WM_TIMER), solange ich mit der linken maustaste auf einen button drücke.
    die aktion soll sofort nach loslassen der linken maustaste gestoppt werden.

    wie kann ich feststellen ob die linke maustaste am button gedrückt ist bzw. losgelassen wird ??

    danke für eure hilfe !



  • Message WM_LBUTTONDOWN und WM_LBUTTONUP

    für deinen Dialog definieren.

    In dieser Funktion dann abfragen ob sich die Maus über deinen Button befindet.



  • das hatte ich versucht, allerdings funktioniert das nur für den dialog aber NICHT für schaltflächen !



  • Klar liefert dir das die Schaltfläche nicht aber der Dialog.
    In der Funktion musst du dann abfragen ob sich deine Maus über der Schaltfläche befindet.



  • meine lbuttondown-sache sieht testmässig so aus:

    afx_msg void CMP3PlayerDlg::OnLButtonDown(UINT nFlags, CPoint point)
    {
    AfxMessageBox("Hallo");
    }

    wenn ich im dialog auf die maustaste drücke -erscheint logischerweise die messagebox.

    befinde ich mich mit der maus auf einem Buttton und drücke die Maustaste
    erscheint die MessageBox NICHT - daraus schliesse ich, daß OnLButtonDown erst gar nicht aufgerufen wird.
    wie soll ich dann also in OnLButtonDown prüfen, ob ich mich auf dem Button befinde, wenn ich erst gar nicht in OnLButtonDown hineinkomme ???



  • Hi,
    ich hatte dieses Problem auch mal:

    Du musst eine Klasse von CButton ableiten. Dieser Klasse fügst du die Funktionen LButtonDown und LButtonUp hinzu. Dann musst du eine Variable dieser Klasse für den entsprechenden Button einrichten. Sobald die linke Maustaste über dem Button gedrückt wird, wird in der Button-Klasse die Funktion OnLButtonDown aufgerufen.

    Um festzulegen, dass die Variable deiner Button-Klasse mit dem Button verbunden werden soll, füge folgendes in die Funktion DoDataExchange deines Dialogfeldes ein:

    void CDeinDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
            DDX_Control(pDX, IDC_DEIN_BUTTON, m_NameDerButton-KlassenVariable);
        //{{AFX_DATA_MAP(CTestDlg)
        //}}AFX_DATA_MAP
    }
    

    So, ich hoffe, ich konnte dir helfen.

    mfg TakeItEasy



  • Danke für eure Hilfe !
    Das mit der abgeleiteten klasse funktioniert voll gut !


Anmelden zum Antworten