2016-10-23 39 views
0

如何禁用MFC中CListCtrl中多項選項上的工具欄按鈕。當前的實現是,如果沒有元素,那麼按鈕被禁用。現在,如果選擇多個項目,則需要擴展該功能,然後該按鈕需要被禁用。禁用MFC中CListCtrl中多項選項上的按鈕

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

好心建議如何禁用多項選擇

回答

2

只需使用按鈕: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); 
} 

當然,你應該添加一些錯誤處理,以確保Windows初始化:

if (pWnd != NULL && pWnd->GetSafeHwnd() != NULL) 
{ 
    // TODO: safe to call HWND methods 
} 

爲了更好的設計康斯坦丁喬治烏建議如果將所有與視圖相關的代碼移動到您的視圖類(包括OnUpdateUI處理程序),它會更清潔。

+1

或更好的是,讓視圖處理OnUpdateUI()事件,而不是大型機。可以在SDI和MDI中工作,並且不需要檢查視圖是否被初始化,或者調用GetActiveView()。 –

相關問題