Re: Detect changes in ClistCtrl control with checkbox
ON_NOTIFY(NM_CLICK, IDC_LIST, &CSpanRestoreDlg::OnNMClickList)
// Check or uncheck item. If more than one item is selected then use the
one from the
// hit test to determine how we are setting the others (I.E., if it is off
we turn the other
// selected ones on).
void CMyDlg::OnNMClickList(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
LVHITTESTINFO hitinfo;
*pResult = 0;
bool bChecked = false;
//Copy click point
hitinfo.pt = pNMListView->ptAction;
//Make the hit test...
int nItem = m_cList.HitTest(&hitinfo);
if(hitinfo.flags != LVHT_ONITEMSTATEICON)
return; // Didn't click on an icon
if(m_cList.GetItemState(nItem,LVIS_SELECTED) != LVIS_SELECTED) {
// They clicked on one that is not selected... just change it
// ... do something here
bChecked = m_cList.GetCheck(nItem);
bChecked = !bChecked;
m_cList.SetCheck(nItem,bChecked);
*pResult = 1;
return;
}
// Get the checked state from the one they clicked on, but change all
the ones that are selected
UINT uSelectedCount = m_cList.GetSelectedCount();
// Update all of the selected items.
if (uSelectedCount > 0) {
nItem = -1;
m_cList.SetRedraw(false);
for (UINT i=0;i < uSelectedCount;i++) {
nItem = m_cList.GetNextItem(nItem, LVNI_SELECTED);
m_cList.SetCheck(nItem,bChecked);
}
*pResult = 1;
m_cList.Invalidate();
m_cList.SetRedraw();
}
}
Tom
"asoni12" <asoni12@discussions.microsoft.com> wrote in message
news:C3A5D065-15DA-46BB-9F45-B8208D73E2D0@microsoft.com...
"Ajay Kalra" wrote:
On Jan 13, 11:31 am, asoni12 <ason...@discussions.microsoft.com>
wrote:
I am using a CListCtrl with LVS_EX_CHECKBOXES extended style. How can I
detect that a previously checked item has been unchecked or a
previously
unchecked item has been checked. I know that LVN_ITEMCHANGED event is
triggered whenever its state gets changed but how to find if the item
has
been checked / unchecked and its previously state.
Any help is appreciated.
Take a look at ListView_GetCheckState:
http://msdn.microsoft.com/en-us/library/bb761250(VS.85).aspx
and LVN_ITEMCHANGING:
http://msdn.microsoft.com/en-us/library/bb774847(VS.85).aspx
--
Ajay
Hi Ajay,
Thanks for the quick reply.
We get a pointer to an NMLISTVIEW structure in case of both both
LVN_ITEMCHANGING and LVN_ITEMCHANGED event handlers but with this
structure
how can we make sure whether items???s checked/unchecked state has been
toggled or something else has changed?
I mean is there any bit in this structure member which is set/unset when
the
state gets toggled?