2010년 4월 27일 화요일

리스트컨트롤 체크박스 통지받기

void DemoDlg::OnItemchangedLinksList(NMHDR* pNMHDR, LRESULT* pResult)
{
         NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
         *pResult = 0;
 
         if (pNMListView->uOldState == 0 && pNMListView->uNewState == 0)
                 return;  // No change
 
         BOOL bPrevState = (BOOL)(((pNMListView->uOldState &
                                   LVIS_STATEIMAGEMASK)>>12)-1);   // Old check box state
         if (bPrevState < 0)       // On startup there's no previous state 
                 bPrevState = 0; // so assign as false (unchecked)
 
         // New check box state
         BOOL bChecked=(BOOL)(((pNMListView->uNewState & LVIS_STATEIMAGEMASK)>>12)-1);
         if (bChecked < 0) // On non-checkbox notifications assume false
                 bChecked = 0;
 
         if (bPrevState == bChecked) // No change in check box
                 return;
 
         // Now bChecked holds the new check box state
 
         // ....
}

 

Setting the check box state of an item

void SetLVCheck (WPARAM ItemIndex, BOOL bCheck)
{
         ListView_SetItemState (m_lvTestList.m_hWnd, ItemIndex,
                 UINT((int(bCheck) + 1) << 12), LVIS_STATEIMAGEMASK);
}

댓글 없음:

댓글 쓰기