отключить кнопку множественного выбора элементов в CListCtrl в MFC

#c #user-interface #mfc

#c #пользовательский интерфейс #mfc

Вопрос:

Как отключить кнопку панели инструментов при множественном выборе элементов в CListCtrl в MFC. Текущая реализация заключается в том, что если там нет элементов, то кнопка отключена. Теперь функциональность должна быть расширена, если выбрано несколько элементов, тогда кнопку нужно отключить.

 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 amp;amp; pWnd->GetSafeHwnd() != NULL)
{
    // TODO: safe to call HWND methods
} 
  

Для лучшего дизайна, как предложил Константин Георгиу, было бы намного чище, если бы вы переместили весь связанный с view код в свой класс view, включая OnUpdateUI обработчики.

Комментарии:

1. Или, что еще лучше, пусть представление обрабатывает событие OnUpdateUI(), а не мэйнфрейм. Будет работать как в SDI, так и в MDI, и нет необходимости проверять, инициализировано ли представление, или вызывать GetActiveView().