【问题标题】:disable a button on multiple selection of items in CListCtrl in MFC在 MFC 中的 CListCtrl 中禁用多项选择项上的按钮
【发布时间】: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;
     }        
 }

请建议如何禁用多选按钮

【问题讨论】:

    标签: c++ user-interface mfc


    【解决方案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()。
    猜你喜欢
    • 2023-03-18
    • 2013-11-22
    • 2013-05-10
    • 1970-01-01
    • 2017-07-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多