CListViewCtrl - Klick auf Checkbox

C++ und WTL

Wie prüft man, ob in einem CListViewCtrl mit LVS_EX_CHECKBOXES Stil auf die Checkbox geklickt wurde? Da keine passende Message gesendet wird, muss der Klick mit einem Hittest überprüft werden.

int HitTest(
   POINT pt,
   UINT * pFlags
) const;

pt ist der Punkt, an dem der Test durchgeführt wird, pFlags ein Pointer auf einen Integer, in den das Ergebnis geschrieben wird. Da das Vorhaben nur bei Listviews im Report-Style mit Checkboxes Sinn macht, müssen die entsprechenden List View Styles gesetzt sein.

pList->SetExtendedListViewStyle(LVS_REPORT | LVS_EX_CHECKBOXES | ... );

Um den Hittest durchzuführen, wird einen Handler für die NM_CLICK Benachrichtigung eingefügt:

BEGIN_MSG_MAP(CMyDlg)
...
NOTIFY_HANDLER_EX(IDC_LIST ,NM_CLICK, OnListClick)
...
END_MSG_MAP()

LRESULT CMyDlg::OnListClick(NMHDR* phdr)
{
	NMLISTVIEW * pLV = reinterpret_cast<NMLISTVIEW*>(phdr);
	UINT uFlags;
	int nItem = pList->HitTest(pLV->ptAction, &uFlags);
	if (nItem > -1 && (uFlags & LVHT_ONITEMSTATEICON)){
		// do something
	}

	return 0;
}

Weitere Werte des LVHITTESTINFO Flags sind:

Links

  1. MSDN LVHITTESTINFO Structure

Diskussion

Sende ein Kommentar, Frage, Korrekturen, Beschimpfungen...

Name:

Nachricht:


doxapp c++
Zur Übersicht
home