CListCtrl根据选定的行值执行操作

时间:2017-08-02 14:02:52

标签: c++ mfc legacy

我必须根据CListViewCtrl中的值启用/禁用对话框上的按钮。基于所选行。我到目前为止:

NOTIFY_HANDLER(IDC_LIST, LVN_ITEMCHANGED, OnMyListChange)

// ....

    LRESULT OnMyListChange(int, LPNMHDR pNMHDR, BOOL&)
    {
        NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
        if ((pNMListView->uChanged & LVIF_STATE) 
            && (pNMListView->uNewState & LVIS_SELECTED))
        {
            // enable/disable buttons based on row field value
        }
        return 0;
    }

假设我有column1 column2 column3。我需要根据所选行中的column2值编写条件。多行选择不是一种情况。谢谢。

1 个答案:

答案 0 :(得分:1)

有一种方法GetItemText。注意它指的是:

  

nItem   要检索其文本的项的索引。

     

nSubItem   指定要检索其文本的子项。

将它们视为。现在,查看处理程序中的NM_LISTVIEW结构:

typedef struct tagNMLISTVIEW {
  NMHDR  hdr;
  int    iItem;
  int    iSubItem;
  UINT   uNewState;
  UINT   uOldState;
  UINT   uChanged;
  POINT  ptAction;
  LPARAM lParam;
} NMLISTVIEW, *LPNMLISTVIEW;

它也有这些属性:

int    iItem;
int    iSubItem;

因此,您应该能够获得项目文本并执行您想要执行的操作。例如:

// Get text in column 2 (it might 1 - can't remember if it is zero based indexing)
CString strValue = m_myList.GetItemText(pNMListView->iItem, 2);
if(strValue == "DoThis")
{
    // ...
}

以上代码测试!!