gpt4 book ai didi

wxwidgets - 如何显示wxWidgets弹出菜单的帮助字符串?

转载 作者:行者123 更新时间:2023-12-04 18:26:07 26 4
gpt4 key购买 nike

wxWidgets应用程序在主窗口的状态栏中显示普通菜单项的帮助字符串。不幸的是,对于使用wxWindow::PopupMenu命令调用的菜单,它似乎没有显示它们,我需要这样做。

我尝试将EVT_MENU_HIGHLIGHT_ALL处理程序添加到父窗口,但是没有被调用。

必须有某种方法来处理或重定向消息以显示帮助文本。我想念什么?

最佳答案

我尝试通过wxFrame而不是当前窗口(wxListCtrl)调用它。这很有帮助,但效果不明显:当鼠标移到弹出菜单项上时,它会清除状态栏,但不会显示帮助文本。

当我研究wxWidgets源代码时,我发现了原因:我的弹出菜单项不在菜单栏上。 wxWidgets将菜单项的ID发送到菜单栏以获取文本,在这种情况下显然失败。

它花了一些时间,但我想出了解决此问题的方法:

////////////////////////////////////////////////////////////////////////////
// In a header file...

class PopupMenu: public wxMenu {
public: //
PopupMenu(): mPushed(false) { }

void OnOpen(wxMenuEvent &evt);
void OnClose(wxMenuEvent &evt);
void OnShowMenuHelp(wxMenuEvent &evt);

private: //
bool mPushed;

DECLARE_EVENT_TABLE()
};

////////////////////////////////////////////////////////////////////////////
// In a cpp file...

BEGIN_EVENT_TABLE(PopupMenu, wxMenu)
EVT_MENU_OPEN(PopupMenu::OnOpen)
EVT_MENU_CLOSE(PopupMenu::OnClose)
EVT_MENU_HIGHLIGHT(wxID_ANY, PopupMenu::OnShowMenuHelp)
END_EVENT_TABLE()

void PopupMenu::OnOpen(wxMenuEvent &evt) {
if (!mPushed) {
// Clear it
findStatusBar()->PushStatusText(wxString());
mPushed = true;
}
}

void PopupMenu::OnClose(wxMenuEvent &evt) {
if (mPushed) {
findStatusBar()->PopStatusText();
mPushed = false;
}
}

void PopupMenu::OnShowMenuHelp(wxMenuEvent &evt) {
if (mPushed) {
findStatusBar()->SetStatusText(GetHelpString(evt.GetMenuId()));
} else {
findStatusBar()->PushStatusText(GetHelpString(evt.GetMenuId()));
mPushed = true;
}
}


findStatusBar是一种便捷功能,可定位程序的框架窗口并在其上调用 GetStatusBar。)

现在,我仅从 PopupMenu派生一个我需要的弹出窗口的类。结果是完美的。

解决此问题的方法可能更简单,但是如果没有将弹出窗口的项目放在菜单栏上,我将找不到它。

关于wxwidgets - 如何显示wxWidgets弹出菜单的帮助字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5783472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com