ListControl & CheckBox
Использую ListControl как Report, как можно добавить в в строки CheckBox? Или может использовать другой Control. Очень срочно надо, просьба поподробней, нет времени рарбираться, MSDN у меня в данный момент нет. Проект уже завтра надо сдавать на тестирование!!!
К примеру к ListView в report стиле можно добавить элемент с чекбоксом таким образом:
int AddItemToColumn(HWND hwlist,int indexcol,int indexitem,char* text)
{
LVITEMA lvI;
lvI.mask = LVIF_TEXT | LVIF_STATE; //LVIF_IMAGE | LVIF_PARAM
lvI.state = 0;
lvI.stateMask = 0;
lvI.iItem = indexcol;
lvI.iSubItem = indexitem;
lvI.pszText = text;
lvI.cchTextMax = strlen(text) ;
int index=indexitem;
if(indexitem==0)
index =ListView_InsertItem(hwlist, &lvI) ;
else
ListView_SetItemText( hwlist,indexcol,indexitem,text);
return index;
}
Весь смысл в использовании флага LVIF_STATE.
Затем можно установить или сбросить состояние с помощью ListView_SetItemState(hwlist,0,LVIS_SELECTED,0);
Или получить текущее состояние: if(ListView_GetItemState(hwlist,0,LVIS_SELECTED) & LVIS_SELECTED)
{
//checked
}
else
{
//unchecked
}
Либо динамически перехватывать смену состояния итемов так:
case WM_NOTIFY :
idCtrl = (int) wParam;
nhdr=(LPNMHDR) lParam;
switch (nhdr->code)
{
case LVN_ITEMCHANGED:
pnmv = (LPNMLISTVIEW) lParam;
if(pnmv->uNewState==4096)//check box unchecked
{
}
else if(pnmv->uNewState==8192)//check box checked
{
}
К примеру к ListView в report стиле можно добавить элемент с чекбоксом таким образом:
int AddItemToColumn(HWND hwlist,int indexcol,int indexitem,char* text)
{
LVITEMA lvI;
lvI.mask = LVIF_TEXT | LVIF_STATE; //LVIF_IMAGE | LVIF_PARAM
lvI.state = 0;
lvI.stateMask = 0;
lvI.iItem = indexcol;
lvI.iSubItem = indexitem;
lvI.pszText = text;
lvI.cchTextMax = strlen(text) ;
int index=indexitem;
if(indexitem==0)
index =ListView_InsertItem(hwlist, &lvI) ;
else
ListView_SetItemText( hwlist,indexcol,indexitem,text);
return index;
}
Весь смысл в использовании флага LVIF_STATE.
Затем можно установить или сбросить состояние с помощью ListView_SetItemState(hwlist,0,LVIS_SELECTED,0);
Или получить текущее состояние: if(ListView_GetItemState(hwlist,0,LVIS_SELECTED) & LVIS_SELECTED)
{
//checked
}
else
{
//unchecked
}
Либо динамически перехватывать смену состояния итемов так:
case WM_NOTIFY :
idCtrl = (int) wParam;
nhdr=(LPNMHDR) lParam;
switch (nhdr->code)
{
case LVN_ITEMCHANGED:
pnmv = (LPNMLISTVIEW) lParam;
if(pnmv->uNewState==4096)//check box unchecked
{
}
else if(pnmv->uNewState==8192)//check box checked
{
}
Смысл понят. Огромное спасибо - пойду возится.
Смысл понят. Огромное спасибо - пойду возится.
блема была решена намного проще, достаточно добавить к ListControl стиль LVS_EX_CHECKBOXES, например так: