CListCtrl 根据选定的行值执行操作
CListCtrl do action based on selected row values
我必须 enable/disable 基于 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
值编写一个条件。多行选择不是这种情况。谢谢。
有一个方法GetItemText。注意它指的是:
nItem
The index of the item whose text is to be retrieved.
nSubItem
Specifies the subitem whose text is to be retrieved.
将它们视为 行和列。现在,查看处理程序中的 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")
{
// ...
}
以上代码未测试!!
我必须 enable/disable 基于 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
值编写一个条件。多行选择不是这种情况。谢谢。
有一个方法GetItemText。注意它指的是:
nItem
The index of the item whose text is to be retrieved.
nSubItem
Specifies the subitem whose text is to be retrieved.
将它们视为 行和列。现在,查看处理程序中的 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")
{
// ...
}
以上代码未测试!!