在 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中的列表视图控件CListCtrl显示信息?谢谢