我有一个带有LVS_REPORT
样式的列表视图,我使用LVS_EX_HEADERDRAGDROP
样式允许用户移动列。
用户将能够动态添加/删除列。我正在LVN_GETDISPINFO
填充它。
因此,除非我看到这一切都错了,否则我需要跟踪哪些列是可见的,以及它们的顺序。
我目前的实现是为每列提供enum
个“列ID”和一个ints
数组,数组中的值将指定列位置。
示例:
enum {FIRSTNAME = 0, LASTNAME, STREET, ADDRESS};
int cols[] = {
LASTNAME, // Last Name, this will be displayed in the first column
FIRSTNAME, // First Name, this will be displayed in the second column
ADDRESS // Address, this is displayed in the third column
};
在LVN_GETDISPINFO
:
NMLVDISPINFO *plvdi = reinterpret_cast<NMLVDISPINFO*>(lParam);
if (cols[plvdi->item.iSubItem] != -1)
{
GetDataByRowAndColumn(plvdi->item.iItem, cols[plvdi->item.iSubItem]);
}
现在的问题是,如果用户更改了列的顺序,我还没有找到一种方法来确定列的新顺序,以便我可以更新我的数组。
当用户更改列的顺序时,是否会发送消息? 我没有在msdn上找到一个。 或者我的方法是完全错误的,我应该采用不同的方法吗?