【问题标题】:VisualStudio MFC CListCtrl SetItemText failsVisualStudio MFC CListCtrl SetItemText 失败
【发布时间】:2015-04-22 10:58:36
【问题描述】:

我使用 CListCtrl 创建了一个 MFC Visual Studio 项目。我在 CDialog 类中添加了一些项目,例如:

int l_iItem = m_listCtrl.InsertItem(LVIF_TEXT|LVIF_STATE, counter, someString, 0, LVIS_SELECTED, 0, 0);       
m_listCtrl.SetItemText( l_iItem, 1, blockHexChar );  
m_listCtrl.SetItemText( l_iItem, 2, description);

这很好用。

之后我想编辑一个子项(通过双击事件)。工作也很好。

如果编辑完成(这是在 CListCtrl 类中),

OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult)

将被调用。看起来是这样的

LV_DISPINFO *plvDispInfo = (LV_DISPINFO *)pNMHDR;   
LV_ITEM *plvItem = &plvDispInfo->item;
if (plvItem->pszText != NULL)   
{
  bool res = SetItemText(plvItem->iItem, plvItem->iSubItem, plvItem->pszText);
}

我总是返回 0,所以 SetItemText 失败了。

知道我做错了什么吗?

干杯 ehmkey

【问题讨论】:

    标签: c++ mfc clistctrl


    【解决方案1】:

    您必须在OnEndLabelEdit 中使用PostMessage 向自己发布一条用户定义的消息(WM_USER+NNN)。更改标签以响应该消息。

    【讨论】:

      【解决方案2】:

      LVN_ENDLABELEDIT 通过 lParam 传递一个指向 NMLVDISPINFO 的指针。我认为您在处理通知时正在查看错误的结构。在 VS2013 中使用类向导生成事件处理程序给了

      void CMFCApplication6Dlg::OnLvnEndlabeleditList1(NMHDR *pNMHDR, LRESULT *pResult)
          {
          NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
          // TODO: Add your control notification handler code here
          *pResult = 0;
          }
      

      【讨论】:

        【解决方案3】:

        感谢您的意见,但问题出在 CDialog 类中的 MESSAGE_MAP(....) 中。

        我这里有一个成员,它保存列表,我直接映射到 CListCtrl 类。

        BEGIN_MESSAGE_MAP(CPeriDialog, CDialog)
          ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST1, &CListCtrl::OnEndLabelEdit)
        END_MESSAGE_MAP()
        

        现在我做了一个包装函数,将事件转发到正确的对象。

        BEGIN_MESSAGE_MAP(CPeriDialog, CDialog)
          ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST1, &CPeriDialog::EndEdit)
        END_MESSAGE_MAP()
        

        功能简单看起来是这样的

        void CPeriDialog::EndEdit(NMHDR* pNMHDR, LRESULT* pResult)
        {
          m_listCtrl.OnEndLabelEdit(pNMHDR, pResult);
        } 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多