0
CListCtrl을 LVS_EX_CHECKBOXES 스타일로 사용하고 있습니다. 그리고 적어도 두 개의 체크 박스를 언제든지 확인하도록 설정해야합니다.CListCtrl (LVS_EX_CHECKBOXES 스타일)
어떻게하면됩니까?
CListCtrl을 LVS_EX_CHECKBOXES 스타일로 사용하고 있습니다. 그리고 적어도 두 개의 체크 박스를 언제든지 확인하도록 설정해야합니다.CListCtrl (LVS_EX_CHECKBOXES 스타일)
어떻게하면됩니까?
먼저 당신이 (예를 들어, CMyListCtrl
라고도 함) 함정에 쉽게 CListCtrl
에서 자신의 클래스를 파생에 의해 이루어집니다 LVN_ITEMCHANGING
통지를 필요로하는 다음과 같은 메시지 맵 항목을 추가하는 다음과 :
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
ON_NOTIFY_REFLECT(LVN_ITEMCHANGING, &CMyListCtrl::OnLvnItemchanging)
END_MESSAGE_MAP()
을 그런 다음 같은 메시지 핸들러를 작성 : 당신이 결정할 수 있도록
void CMyListCtrl::OnLvnItemchanging(NMHDR *pNMHDR, LRESULT *pResult)
{
// an item has changed
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// by default, allow change
*pResult = 0;
// see if item was checked or unchecked
if ((pNMLV->uNewState & 0x2000) == 0x2000)
{
// item was checked - do anything you like here
}
else if ((pNMLV->uNewState & 0x1000) == 0x1000)
{
// item was unchecked - see how many selections we have
if (/* pseudocode */ number of selected items < 2)
{
// disallow change
*pResult = 1;
}
}
}
조건은 선택의 수를 추적하는 방법을 의사 코드입니다 - 아마 위의 운전 방식에 코드를 추가하여 카운트를 유지 d, 또는 거기에 루프를 넣어 각 항목의 점검 상태를 얻고 집계를 만드십시오.
나는 이것이 충분히 움직여야한다고 생각합니다. 그래서 더 이상 붙잡을 수 없다면 질문을 업데이트하십시오.