#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().