【问题标题】:How to response MENU_SELECTED event in an Inherited wxMenuBar?如何在继承的 wxMenuBar 中响应 MENU_SELECTED 事件?
【发布时间】:2016-08-03 03:45:24
【问题描述】:

我尝试过 DECLARE_EVENT_TABLE() && Connect(),但它不起作用。我的代码就是这样。如何使它工作?

    //.h
        class MainFrameMenuBar :public wxMenuBar
//...
        private:
            DECLARE_EVENT_TABLE();
        };
/...
    //.cpp
        BEGIN_EVENT_TABLE(MainFrameMenuBar, wxMenuBar)
            EVT_MENU(XRCID("ID_MENU_FIGURE"), MainFrameMenuBar::onMenuItemFigure)
        END_EVENT_TABLE()

        MainFrameMenuBar::MainFrameMenuBar(wxWindow* parent)
        {
            wxXmlResource::Get()->LoadMenuBar(parent,wxT("ID_MAIN_MENUBAR"));
            //int id = XRCID("ID_MENU_FIGURE");
            //Connect(id, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MainFrameMenuBar::onMenuItemFigure), NULL, this);
        }

        void MainFrameMenuBar::onMenuItemFigure(wxCommandEvent& event)
        {
            printf("abc");
        }

【问题讨论】:

    标签: wxwidgets


    【解决方案1】:

    这曾经在较旧的 wxWidgets 版本中被破坏,您必须仅在包含菜单栏而不是菜单栏本身的 wxFrame 中处理菜单事件,但它应该在很久以前是 fixed,所以也许您需要升级?

    如果您确实使用受该错误影响且无法升级的版本,则处理框架中的事件是最简单的解决方法。

    【讨论】:

    • 我使用的是 3.1.0 版本。还有什么问题吗?
    • 不,我没有看到这里显示的代码有任何问题,所以我不知道可能有什么问题。与往常一样,如果您可以尝试在现有 wxWidgets 示例(例如 minimal sample)中重现该问题,它可以缩小问题范围,例如我们至少会知道它是与使用 XRC 相关还是独立于它等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2010-12-16
    • 2021-05-30
    • 2019-02-04
    • 1970-01-01
    相关资源
    最近更新 更多