我正在嘗試獲取MFC CListCtrl
中列的順序。最初我嘗試在HDN_ENDDRAG
通知的消息處理程序中調用GetColumnOrderArray()
,但總是返回舊的(預拖放)列順序。因此,根據this SO發表的評論,我嘗試處理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