wxToolBar:获取工具的位置和大小?
我有一个wxToolBar里面一个下拉项: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()?
谢谢!
您可以尝试拨打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的位置,下拉菜单应该在那里出现在!? – Elmi
我不确定,因为我目前没有安装wxWidgets,所以无法快速测试。所以请测试并报告。 –
@Elmi:它有效吗? –
您使用的是'wxComboBox'类?如果是这样:请尝试'controlMenu.Popup()'([see here](http://docs.wxwidgets.org/trunk/classwx_combo_box.html#a325d7d2afc9e1e17f7b5fb13f4186d0c))而不是'PopupMenu(controlMenu)'。这是否符合您的预期? –
Andre Kampling:不,不是wxComboBox,而是在wxToolBar中使用wxMenu创建下拉工具 – Elmi