목록 컨트롤은 리소스에 대해 단일 선택으로 정의됩니다.확인란이있는 CListCtrl
질문 1
내 CListCtrl
의 첫 번째 컬럼의 헤더의 체크 박스를 갖고 싶어. OnInitDialog
에 나는 내가 행동과 선택 조치를 확인하는 것은 다른 목적을 위해 사용됩니다 욕망 때문에 확실히하지하는 확장 |LVS_EX_AUTOCHECKSELECT
에 추가 할 경우에만 헤더의 체크 박스를 제공
m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
CString s;
s.LoadString(IDS_COLUMN1);
#ifndef HDS_CHECKBOXES
// Copied from Microsoft SDKs\Windows\v7.0A\Include\CommCtrl.h
#define HDS_CHECKBOXES 0x0400
#endif
CHeaderCtrl& header = *m_list.GetHeaderCtrl();
header.ModifyStyle(0, HDS_CHECKBOXES);
#ifndef HDF_CHECKBOX
// Copied from Microsoft SDKs\Windows\v7.0A\Include\CommCtrl.h
#define HDF_CHECKBOX 0x0040
#endif
LVCOLUMN lc = { 0 };
lc.mask = LVCF_FMT |LVCF_WIDTH |LVCF_TEXT | LVCF_SUBITEM;
lc.fmt |= HDF_CHECKBOX;
lc.cx = 96;
lc.pszText = (TCHAR*) (LPCTSTR)s;
m_list.InsertColumn(0, &lc);
있습니다. 때 사용자 검사를 수정하거나 항목을 선택하거나 선택 취소로
질문 2
나는 부울 및 마크 일을 설정해야합니다. 그러나 예를 들어 양식로드시 목록을 채울 때와 같이 항목을 삽입 할 때이 작업을 수행하지 않으려면 InsertItem
이 OnItemChanged
에 "선택 취소 작업"을 트리거하므로 의도없이 실행됩니다.
는 그것은 m_is_inserting
회원 플래그 모든 조건 삽입 나를 의무 : 실제 사용자 확인을 구별 할 수있는 더 좋은 방법이 있나요
m_is_inserting = true;
m_list.InsertItem(i, m_array[i]->GetName());
m_is_inserting = false;
을하고 LVN_ITEMCHANGED
핸들러
void CMyDialog::OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if (pNMListView->uChanged & LVIF_STATE)
{
if (pNMListView->uNewState & LVIS_SELECTED)
OnSelect();
else
{
if (pNMListView->iItem != -1)
{
if ((pNMListView->uNewState & LVIS_STATEIMAGEMASK) == 0x1000)
{
if (!m_is_inserting)
{
m_array[pNMListView->iItem]->m_active = false;
SetModified();
}
}
else if ((pNMListView->uNewState & LVIS_STATEIMAGEMASK) == 0x2000)
{
if (!m_is_inserting)
{
m_array[pNMListView->iItem]->m_active = true;
SetModified();
}
}
}
}
}
*pResult = 0;
}
에 따라 반응/InsertItem
부작용에서 조치를 선택 취소 하시겠습니까?
질문 3
체크/선택 해제 상태를 얻기위한 더 나은 상징적 인 규칙이 있습니까? 매직 넘버 0x1000
과 0x2000
은 꽤 의미가 없습니다!
미리 감사드립니다.
관련 (** 질문 2 **) : http://stackoverflow.com/questions/28582698/differentiate-between-user-click-and-setchecked-in-clistctrl – sergiol