【问题标题】:Disable/Enable Ribbon Buttons for MFC Feature Pack禁用/启用 MFC 功能包的功能区按钮
【发布时间】:2010-10-04 21:31:12
【问题描述】:

我正在使用 MFC 功能包,我在功能区栏上有一些按钮,即 CMFCRibbonButton 的实例。问题是我想在某些条件下启用和禁用其中的一些,但在运行时。我怎样才能做到这一点?因为没有具体的方法...我听说解决方案是在运行时附加/分离事件处理程序,但我不知道如何...

【问题讨论】:

    标签: c++ mfc mfc-feature-pack


    【解决方案1】:

    当您创建 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 示例包并打开 MSOffice2007Demo 解决方案来查看具体如何完成此操作的示例。

      运行示例时,查看功能区“视图”选项卡中的“缩略图”复选框,它已被禁用。

      这由调用pCmdUI->Enable(FALSE);CMSOffice2007DemoView::OnUpdateViewThumb 控制。您可以将其更改为在运行时调用TRUEFALSE 以分别启用/禁用按钮。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-29
        • 2015-02-23
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多