具有 UINT32 值的 CListCtrl SetItemData

Posted

技术标签:

【中文标题】具有 UINT32 值的 CListCtrl SetItemData【英文标题】:CListCtrl SetItemData with UINT32 value 【发布时间】:2012-12-10 21:30:50 【问题描述】:

我有一个CListCtrl,我想存储一个 UINT32 值,但是当我使用 GetItemData 读取时它总是返回 0

我有这个代码:

UINT CMyDialog::MyThread(LPVOID pArg)
  for (int nItem=0; nItem<50; nItem++)
  
    UINT32 nNum=100;
    pDlg->m_listCtrl.InsertItem(0, _T("text")); // this works
    pDlg->m_listCtrl.SetItemData(nItem, nNum); // this not
   
 

/// this is called from a Dialog member function when a button is pressed

void CMyDialog::OnBtnClicked()

  UINT32 nRead=0;
  nRead=m_listCtrl.GetItemData(5);

  // nRead always returns 0
 

即使我使用 int 或 DWORD 而不是 UINT,我也会得到相同的结果。

【问题讨论】:

请发布更多代码,因为我知道这是可行的——我已经使用过了。而且您现有的许多代码毫无意义。比如:m_ListCtrl=GetItemData(nItem),怎么给控件赋值一个整数??? (如果需要帮助,请开始接受更多答案。) 这是我的代码中的样子 我不这么认为。请看我之前的评论 已修复,抱歉,这是帖子中的错字,但代码中没有。 那不应该是nRead = m_ListCtrl.GetItemData(5)吗? 【参考方案1】:

请更加小心地发布您的代码。 如此使用剪切和粘贴很简单,没有任何借口可以在错误之后犯错。由于您不接受很多答案,因此很难为您提供帮助,也不值得。

无论如何,我确实看到你的循环有问题。您应该像这样使用来自InsertItem() 的返回值:

UINT CMyDialog::MyThread(LPVOID pArg)

    for (int nItem=0; nItem<50; nItem++)
    
        UINT32 nNum=100;
        int nIndex = pDlg->m_listCtrl.InsertItem(0, _T("text"));
        pDlg->m_listCtrl.SetItemData(nIndex, nNum);
    

【讨论】:

以上是关于具有 UINT32 值的 CListCtrl SetItemData的主要内容,如果未能解决你的问题,请参考以下文章

通过 TCP 的字符串长度

在展开可选值 uint32 swift 时意外发现 nil

具有 LVS_EX_CHECKBOXES 样式的 CListCtrl

只需要 CListCtrl 控件中的某些行具有复选框

Clickhouse 1亿条20列表的性能测试

Clickhouse 1亿条20列表的性能测试