【问题标题】:wxToolBar: get position and size of a tool?wxToolBar:获取工具的位置和大小?
【发布时间】:2017-06-14 12:26:55
【问题描述】:

我有一个 wxToolBar,里面有一个下拉项:

g_toolBar1->AddTool(TOOLBAR_CMD_CONTROL_DROPDOWN,_("Control elements"),MainWin::getBitmap(gearsXPM,"gears"),wxNullBitmap,wxITEM_DROPDOWN);
custParent->Connect(TOOLBAR_CMD_CONTROL_DROPDOWN,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(DrawCanvasSwitcher::OnToolbar),NULL,g_drawCanvas);
.... // add items to controlMenu here
g_toolBar1->SetDropdownMenu(TOOLBAR_CMD_CONTROL_DROPDOWN,controlMenu);

在某些情况下,我通过调用 PopupMenu() 以编程方式打开下拉菜单。我的问题是:这个函数在当前鼠标位置打开菜单,而不是像带有向下箭头的按钮那样在工具下方。

那么:如何获取工具 TOOLBAR_​​CMD_CONTROL_DROPDOWN 的位置和大小,以便计算下拉菜单的合适位置,以便将其交给 PopupMenu()?

谢谢!

【问题讨论】:

  • 您在使用wxComboBox 类吗?如果是这样:尝试controlMenu.Popup() (see here) 而不是PopupMenu(controlMenu)。是否如您预期的那样工作?
  • Andre Kampling:不,不是 wxComboBox,而是在 wxToolBar 中使用 wxMenu 来创建下拉工具

标签: c++ drop-down-menu toolbar wxwidgets


【解决方案1】:

您可以尝试调用GetBestSize(),就像我在下面所做的那样,也不要忘记在使用AddTool() 添加工具后调用Realize()

g_toolBar1->AddTool(TOOLBAR_CMD_CONTROL_DROPDOWN,_("Control elements"),MainWin::getBitmap(gearsXPM,"gears"),wxNullBitmap,wxITEM_DROPDOWN);

/* Added the next two lines. */
g_toolBar1->Realize();
wxSize toolBarPos = g_toolBar1->GetBestSize();

/* If you add more tools call Realize() after that again. */
custParent->Connect(TOOLBAR_CMD_CONTROL_DROPDOWN,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(DrawCanvasSwitcher::OnToolbar),NULL,g_drawCanvas);
.... // add items to controlMenu here
g_toolBar1->SetDropdownMenu(TOOLBAR_CMD_CONTROL_DROPDOWN,controlMenu);

然后你可以使用toolBarPos来调用PopupMenu()方法,比如:

PopupMenu(controlMenu, toolBarPos.getWidth(), toolBarPos.getHeight());

【讨论】:

  • 好的,但这给了我工具栏的位置,而不是下拉菜单应该出现的特定工具 TOOLBAR_​​CMD_CONTROL_DROPDOWN 的位置!?
  • 我不确定,因为我目前没有安装 wxWidgets,所以无法快速测试它。所以请测试并报告。
  • @Elmi:您能否发布您的答案并接受该解决方案,以便其他人可以从中获利?
  • 我的解决方案是完全不同的,与 wxToolbars 无关......
猜你喜欢
  • 2019-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
相关资源
最近更新 更多