问题描述
我正在用C ++在Visual Studio 2017上编写基于对话框的MFC应用程序。
在对话框中,我有一个列表控件。我想知道用户在编辑列表时会更改哪一列。
列表控件如下:
因此,如果我编辑单元格Channel Mode B
,我希望该单元格的值是row = 2和col =1。我尝试使用以下代码:
在mask
的{{1}}字段中,我启用了以下标志:
LVCOLUMN
在LVCOLUMN lvColumn;
lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
中,我添加了以下通知:
MESSAGE_MAP
我编写的处理程序是:
ON_NOTIFY(LVN_ITEMCHANGED,IDC_LIST1,&CEditableListControlDlg::OnLvnItemchangedList1)
在此代码中,变量void CEditableListControlDlg::OnLvnItemchangedList1(NMHDR *pNMHDR,LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
if (pNMLV->uChanged & LVIF_STATE)
{
if ((pNMLV->uNewState) & LVIS_SELECTED)
{
int iItem = pNMLV->iItem;
int subItem = pNMLV->iSubItem;
}
}
*pResult = 0;
}
是选定的行,iItem
是选定的列。
我感兴趣的是获得subItem
。我的问题是pNMLV->iSubItem
变量的值始终为零,这意味着Microsoft Docs文档here
如何获取已编辑子项目的索引?
谢谢。
解决方法
当您选择其他行时,消息将响应。如果选择相同的行和不同的列,该消息将不会重复响应。因此, # vowels list
vowels = ['a','e','i','o','u']
# index of 'e'
index = vowels.index('e')
print('The index of e:',index)
# index of the first 'i'
index = vowels.index('i')
print('The index of i:',index)
在您仅更改列时将始终为0。
您可以参考以下示例。
iSubItem