【问题标题】:MFC limit selected item in ClistCtrlMFC限制ClistCtrl中的选定项目
【发布时间】:2011-03-14 09:37:17
【问题描述】:

嗨 我使用有 20 个项目的 ClistCtrl,我想限制所选项目的数量。 例如只能选择 10 个项目。 我该怎么做? 谢谢你的帮助。

【问题讨论】:

    标签: c++ winapi mfc clistctrl


    【解决方案1】:

    您必须处理 LVN_ODSTATECHANGED 通知消息并在每次 LVIS_SELECTED 状态更改时计算所选项目的数量

    谢谢

    【讨论】:

      【解决方案2】:

      所以我写了这段代码。它应该工作。只需为列表创建一个事件处理程序

      void CDatenbankView::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
      {
          int SelctedItems;
          SelctedItems = 0;
          int Index;
      
          LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
      
          for (Index = 0; Index < m_List.GetItemCount(); ) //Check every Item
          {
              if (m_List.GetItemState (Index, LVIS_SELECTED) == LVIS_SELECTED) //Checks if it is selected
              {
                  if (SelctedItems > 10) 
                  {
                      MessageBox (_T("Cant select more than 10 Items"));
                      for (Index = 0; Index < m_List.GetItemCount(); )
                      {
                          m_List.SetItemState (Index, ~LVIS_SELECTED, LVIS_SELECTED);
                          Index++;
                      }
                      break;
                  }
                  else
                  {
                      SelctedItems++;
                  }
              }
              Index++;
          }
          *pResult = 0;
      }
      

      m_List 是我的 CListCtrl 控制变量

      【讨论】:

        【解决方案3】:

        此类功能没有内置功能。您必须为此编写您的代码。也许您可以找到另一种方法来做到这一点,例如拥有一个源列表和一个“选择列表”。您将项目从第一个复制/移动到第二个,但您不允许用户将超过 10 个项目放入目标列表中。

        【讨论】:

          猜你喜欢
          • 2023-03-18
          • 2013-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-21
          • 2020-07-17
          • 1970-01-01
          相关资源
          最近更新 更多