Re: GetCheck not working for CListView
I've never used checks with a normal clistctrl (only with a virtual one).
In the case of the virtual list control I typically keep the check state in
my own structure (with the data) and set the bitmap in the OnGetDispInfo()
with code similar to this:
//Does the list need image information?
if( pItem->mask & LVIF_IMAGE) {
//To enable check box, we have to enable state mask...
pItem->mask |= LVIF_STATE;
pItem->stateMask = LVIS_STATEIMAGEMASK;
if(pFileItem->m_bChecked) {
//Turn check box on
pItem->state = INDEXTOSTATEIMAGEMASK(2);
}
else {
//Turn check box off
pItem->state = INDEXTOSTATEIMAGEMASK(1);
}
}
I set the style for the list control to include LVS_EX_CHECKBOXES so the
images are available. I check for the user's click using code like:
void CMyDlg::OnNMClickList(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
LVHITTESTINFO hitinfo;
*pResult = 0;
//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
CFileItem *pItem = (CFileItem *)m_pCurrentFileItemArray->GetAt(nItem);
pItem->m_bChecked = !pItem->m_bChecked;
m_cList.Invalidate();
*pResult = 1;
return;
}
// In case they have more than one selected check or uncheck them all
if(nItem != -1) {
// Get the checked state from the one they clicked on
CFileItem *pItem = (CFileItem *)m_pCurrentFileItemArray->GetAt(nItem);
BOOL bChecked = !pItem->m_bChecked;
UINT nCount = m_cList.GetSelectedCount();
// Update all of the selected items.
if (nCount > 0) {
nItem = -1;
m_cList.SetRedraw(false);
for (UINT i=0;i < nCount;i++) {
nItem = m_cList.GetNextItem(nItem, LVNI_SELECTED);
pItem = (CFileItem *)m_pCurrentFileItemArray->GetAt(nItem);
pItem->m_bChecked = bChecked;
}
*pResult = 1;
m_cList.Invalidate();
m_cList.SetRedraw();
}
}
}
I'm not sure any of this helps you, but I know this code works and I don't
know if you're using a virtual or normal list control.
Tom
"Chris Baker" <ChrisBaker@discussions.microsoft.com> wrote in message
news:1389E15B-405A-467C-AAD7-5C3E25350192@microsoft.com...
Sorry, that was a mistake, it didn't work
"Chris Baker" wrote:
I found this and it works.....
CListCtrl& lc = GetListCtrl();
UINT uiState = lc.GetItemState(nItem, LVIS_SELECTED);
"Chris Baker" wrote:
I am trying to read the checkboxes in a listview
neither
GetListCtrl().UpdateData();
return ListView_GetCheckState (GetListCtrl().m_hWnd, nItem);
or
return GetListCtrl().GetCheck(nItem);
work at all. Any ideas?