2009-02-02 159 views
4

我正在使用MFC功能包,並且在功能區欄上有一些按鈕,CMFCRibbonButton的實例。問題是我想在某些條件下啓用和禁用其中的一些,但是在運行時。我怎樣才能做到這一點?因爲沒有具體的方法...我聽說解決方案是在運行時附加/分離事件處理程序,但我不知道如何...禁用/啓用MFC功能包的功能區按鈕

回答

13

當您創建CMFCRibbonButton對象時,您必須指定關聯的命令ID(請參閱CMFCRibbonButton構造函數here的文檔)。然後使用MFC中的常用命令更新機制,啓用和禁用功能區按鈕,使用CCmdUI類。

舉例來說,如果你有一個功能區按鈕,其命令ID是ID_MYCOMMAND,你想在你的應用程序的視圖類來處理這個命令,你應該添加這些功能類:

// MyView.h 
class CMyView : public CView { 
    // ... 
    private: 
     afx_msg void OnMyCommand(); 
     afx_msg void OnUpdateMyCommand(CCmdUI* pCmdUI); 
     DECLARE_MESSAGE_MAP() 
}; 

並加以實施在.cpp文件:

// MyView.cpp 
void CMyView::OnMyCommand() { 
    // add command handler code. 
} 

void CMyView::OnUpdateMyCommand(CCmdUI* pCmdUI) { 
    BOOL enable = ...; // set flag to enable or disable the command. 
    pCmdUI->Enable(enable); 
} 

你也應該補充ON_COMMANDON_UPDATE_COMMAND_UI條目消息映射爲CMyView類:

// MyView.cpp 
BEGIN_MESSAGE_MAP(CMyView, CView) 
    ON_COMMAND(ID_MYCOMMAND, &CMyView::OnMyCommand) 
    ON_UPDATE_COMMAND_UI(ID_MYCOMMAND, &CMyView::OnUpdateMyCommand) 
END_MESSAGE_MAP() 

有關MFC中消息映射的更多信息,請參閱MSDN中的TN006: Message Maps

我希望這有助於!

2

ChrisN給出了一個非常完美的答案。您可以通過從here下載VS2008 Sample Pack並打開MSOffice2007Demo解決方案,看到完全如何實現的示例。

運行示例時,請查看功能區「視圖」選項卡中的「縮略圖」複選框,該選項已禁用。

這由CMSOffice2007DemoView::OnUpdateViewThumb控制,其調用pCmdUI->Enable(FALSE);。您可以在運行時更改此設置以呼叫TRUEFALSE分別啓用/禁用按鈕。