Knowledge Base Nr: 00153 tippbutton.cpp - http://www.swe-kaiser.de

Downloads:

MFC: Button meldet an Dialog Drücken und Loslassen (Tippbetrieb)

  
//In ClassWizard:
//===============
// - neue Klasse von CButton ableiten (z.B.: CMyButton)
// - in der neuen Klasse Messagehandler für WM_LBUTTONDOWN und WM_LBUTTONUP kreiren
//
// - in der Dialogklasse OnCommand() überladen
// - in der Dialogklasse Membervariable für den Button vom Typ Control|CMyButton anlegen

//Im Editor:
//==========
// - im header der neuen Klasse 2 Windownachrichten definieren
#define MYBUTTONDOWN (WM_USER+100)
#define MYBUTTONUP (WM_USER+101)

// - header der neuen Klasse in Dialogheader includieren
#include "MyButton.h"

// - Behandlungsroutinen in der Buttonklasse ausprogrammieren
void CMyButton::OnLButtonDown(UINT nFlags, CPoint point)
{
GetParent()->SendMessage(WM_COMMAND, MYBUTTONDOWN, GetDlgCtrlID());

CButton::OnLButtonDown(nFlags, point);
}

void CMyButton::OnLButtonUp(UINT nFlags, CPoint point)
{
GetParent()->SendMessage(WM_COMMAND, MYBUTTONUP, GetDlgCtrlID());

CButton::OnLButtonUp(nFlags, point);
}

// - in der Dialogklasse OnCommand() ausprogrammieren
BOOL CButtontestDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
CString str, str2;

switch (wParam)
{
case MYBUTTONDOWN:
//über lParam (= CtrlID) kann der Button identifiziert werden (z.B.: IDC_BUTTON2)
GetDlgItem(lParam)->GetWindowText(str2);
str.Format("Button '%s' down!", (const char*)str2);
GetDlgItem(IDC_STATUS)->SetWindowText(str);
return 1;
case MYBUTTONUP:
//über lParam (= CtrlID) kann der Button identifiziert werden (z.B.: IDC_BUTTON2)
GetDlgItem(lParam)->GetWindowText(str2);
str.Format("Button '%s' up!", (const char*)str2);
GetDlgItem(IDC_STATUS)->SetWindowText(str);
return 1;
}

return CDialog::OnCommand(wParam, lParam);
}