List-View包含动态列

时间:2011-11-20 18:02:52

标签: c++ windows api listview

我有一个带有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上找到一个。 或者我的方法是完全错误的,我应该采用不同的方法吗?

0 个答案:

没有答案