我正在尝试获取 MFC 中列的顺序CListCtrl
。最初我尝试调用通知GetColumnOrderArray()
的消息处理程序HDN_ENDDRAG
,但这总是返回旧的(拖放前)列顺序。因此,根据此SO 帖子评论中的建议,我尝试同时处理 theHDN_BEGINDRAG
和 theHDN_ENDDRAG
并使用phdr->pitem->iOrder
. 但pitem
在两个处理程序中对我来说总是 NULL。不知道为什么。
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;
}