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:
Sende ein Kommentar, Frage, Korrekturen, Beschimpfungen...
doxapp c++ Zur Übersicht home