如何在MFC应用程序中获取列表控件的已编辑子项索引

问题描述

我正在用C ++在Visual Studio 2017上编写基于对话框的MFC应用程序。

在对话框中,我有一个列表控件。我想知道用户在编辑列表时会更改哪一列。

列表控件如下:

enter image description here

因此,如果我编辑单元格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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...