Re[2]: Трудности с CListCtrl в динамически созданном диалоге
От: Анна  
Дата: 12.10.10 09:03
Оценка:
Здравствуйте, McQwerty
Здравствуйте, MasterZiv

Ну... после энного прочтения до меня дошло.)) Что перед тем как задать вопрос заголовку, надо бы ему сказать о чем я собственно спрашиваю.
Запомню. Спасибо.
Стрелка у меня самопальная, а сортировка идет по столбцам. Ну, либо по столбику "Тип", либо по столбику "Адрес", и т.д.
Т.е. сортировки по убыванию и возрастанию нет.
Я предполагала в заголовке отмечать колонку по которой сортирую наличием значка.
То разрешить рисовать стрелку, то запретить.

И эта... я победила!! Правда малешко не поняла, ща спрашивать буду.
Собстно, на форуме и накопала.
Функ-я обработки нажатия теперь выглядит так.

void CDial::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
HDITEM hdi;
static int nCol=-1; // запоминает текущий столбик
char cStr[100];
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

if(nCol!=-1 && pNMListView->iSubItem==nCol) // повторное нажатие.
return; // игнорим, ибо уже отсортировано

if(!m_tabl.GetHeaderCtrl()->GetImageList())
m_tabl.GetHeaderCtrl()->SetImageList(&m_image);

// рисуем признак сортировки
m_tabl.GetHeaderCtrl()->GetItem(pNMListView->iSubItem, &hdi);
hdi.mask = HDI_IMAGE|HDI_FORMAT;
hdi.fmt = HDF_LEFT|HDF_IMAGE |HDF_STRING ;
hdi.iImage=0;
m_tabl.GetHeaderCtrl()->SetItem(pNMListView->iSubItem, &hdi);

// стираем старый признак, если есть
if(nCol >= 0){
hdi.mask=HDI_TEXT;
hdi.pszText=cStr;
hdi.cchTextMax=100;
m_tabl.GetHeaderCtrl()->GetItem(nCol, &hdi);
hdi.mask=HDI_TEXT|HDI_FORMAT;
hdi.fmt=HDF_LEFT|HDF_STRING;
m_tabl.GetHeaderCtrl()->SetItem(nCol, &hdi);
}
// кто у нас дежурный
nCol = pNMListView->iSubItem;
*pResult = 0;
}

Я не до конца поняла. Когда делаем GetItem надо указать у чем спрашиваем. И только эту информацию получим.
Тут я говорю что хочу получить текст, и получаю.
А когда SetItem, все что указано в mask будет использоваться при отображении объекта.
Говорю что будет рисоваться текст, и только текст, при чем прижатый вправо. Что и видно в результате.
Следовательно всякие вычитания типа
hdi.mask &=~ HDI_IMAGE;
бессмысленны?

Забодалась бодаться с таким простым действием))
Ощущаю легкую эйфорию. Была б королевой, была бы в восхищении. ))
Спасибо за помощь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.