Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ListControl & CheckBox

324
27 апреля 2006 года
AndreySar
532 / / 01.08.2004
Использую ListControl как Report, как можно добавить в в строки CheckBox? Или может использовать другой Control. Очень срочно надо, просьба поподробней, нет времени рарбираться, MSDN у меня в данный момент нет. Проект уже завтра надо сдавать на тестирование!!!
406
27 апреля 2006 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by AndreySar
Использую 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
{

}

324
27 апреля 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by vitaly2003s
К примеру к 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
{

}



Смысл понят. Огромное спасибо - пойду возится.

324
28 апреля 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by AndreySar
Смысл понят. Огромное спасибо - пойду возится.



блема была решена намного проще, достаточно добавить к ListControl стиль LVS_EX_CHECKBOXES, например так:

 
Код:
m_table.SetExtendedStyle(LVS_EX_CHECKBOXES);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог