Я пытаюсь получить порядок столбцов в MFC CListCtrl
. Первоначально я пробовал звонить GetColumnOrderArray()
в обработчике сообщений для уведомления HDN_ENDDRAG
, но всегда возвращал старый порядок (пре-перетаскивание и падение). Итак, основываясь на рекомендации в комментарии this SO post, я пробовал обрабатывать как HDN_BEGINDRAG
, так и HDN_ENDDRAG
и захватывать старые и новые порядки столбцов с phdr->pitem->iOrder
. Но pitem
всегда имеет значение NULL для меня в обоих обработчиках. Не знаю, почему.Получить столбец (MFC)
SOOO Я попытался с помощью индекса столбца, хранящегося в сообщении (phdr->iItem
) поговорить непосредственно с CHeaderCtrl
и захватить порядок столбцов себя, но поля в структуре, населенной моим контролем заголовка были недействительными; Я все еще не мог получить порядок столбцов.
Есть ли какая-то более глубокая проблема с моим контролем списка? Или я неправильно обрабатываю сообщения?
HDN_BEGINDRAG
обработчика сообщений: обработчик
BOOL CDFAManListView::OnHdnBegindrag(UINT, NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
phdr->iItem; // this contains a valid column index
HDITEM columnStruct;
List->GetHeaderCtrl()->GetItem(phdr->iItem, &columnStruct); // but this call just fills columnStruct with junk values
if (phdr->pitem) // pitem is always null
{
initialPosition = phdr->pitem->iOrder;
}
*pResult = 0;
return TRUE;
}
HDN_ENDDRAG
сообщение:
void CDFAManListView::OnHdnEnddrag(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
HDITEM columnStruct;
List->GetHeaderCtrl()->GetItem(phdr->iItem, &columnStruct); // still just fills columnStruct with junk
List->GetColumnOrderArray(signalColumnOrder); // gets **old** column order
*pResult = 0;
}
Прекрасный, я просто недостаточно читал документацию -.- – aguazales