在 MFC 中的 CListCtrl 中禁用多项选择项上的按钮

Posted

技术标签:

【中文标题】在 MFC 中的 CListCtrl 中禁用多项选择项上的按钮【英文标题】:disable a button on multiple selection of items in CListCtrl in MFC 【发布时间】:2016-10-23 11:01:07 【问题描述】:

如何在 MFC 中的 CListCtrl 中禁用多选项目的工具栏按钮。当前的实现是,如果没有元素,则禁用该按钮。现在,如果选择了多个项目,则需要扩展功能,然后需要禁用按钮。

Void  CMainFrame::OnUpdate( CCmdUI* pCmdUI) 
    
     if(I_count==0)//if no items are present
     
     pCmdUI->Enable(false);
     return;
             
 

请建议如何禁用多选按钮

【问题讨论】:

【参考方案1】:

只需使用:CListCtrl::GetSelectedCount() 即可检索列表视图控件中选定项目的数量。

所以你的实现将如下所示:

void  CMainFrame::OnUpdate(CCmdUI* pCmdUI) 
    
     CMyListView* pView = (CMyListView*) ((CFrameWnd*) AfxGetMainWnd ())->GetActiveView ();
     int nSel = pView->GetListCtrl().GetSelectedCount();
     if(nSel == 0 || nSel > 1)
         pCmdUI->Enable(FALSE);
     else
         pCmdUI->Enable(TRUE);
 

当然你应该添加一些错误处理来确保窗口被初始化:

if (pWnd != NULL && pWnd->GetSafeHwnd() != NULL)

    // TODO: safe to call HWND methods
 

为了更好的设计,Constantine Georgiou 建议将所有与视图相关的代码移动到包括OnUpdateUI 处理程序在内的视图类中会更简洁。

【讨论】:

或者更好的是,让视图处理 OnUpdateUI() 事件,而不是大型机。在 SDI 和 MDI 中都可以工作,无需检查视图是否已初始化,也无需调用 GetActiveView()。

以上是关于在 MFC 中的 CListCtrl 中禁用多项选择项上的按钮的主要内容,如果未能解决你的问题,请参考以下文章

MFC - 如何禁用列表项?

怎样在MFC中的列表视图控件CListCtrl显示信息?谢谢

如何根据 mfc 中的列表控件选择禁用按钮

是否可以在没有 MFC 的情况下使用 CListCtrl

是否可以使用 CListCtrl 编辑数据 - 如果没有,任何人都可以建议 MFC 中的替代控件吗?

如果任何列中不需要图像/图标,MFC CListCtrl是否合适?