【发布时间】:2021-06-19 07:59:45
【问题描述】:
我正在创建一个 C++ wxWidgets 计算器应用程序。我正在实现三角函数,为了节省空间,我将它们全部重新组合在一个按钮中。如果您右键单击该按钮,则会创建一个弹出窗口,其中包含所有功能的按钮。我正在为这项工作使用派生的 wxPopupTransientWindow 类,问题是按钮显示不正确。
这是我的代码:
expandMenu.h
#include "wx/wx.h"
#include "wx/popupwin.h"
struct expandMenuInfo
{
const wxString& label;
wxWindowID id;
expandMenuInfo(const wxString& l, wxWindowID i)
: label{l}
, id{i}
{}
};
class expandMenu : public wxPopupTransientWindow
{
wxWindow* panel;
wxBoxSizer* sizer;
public:
expandMenu(wxWindow* parent, wxPoint pos, std::vector<expandMenuInfo> buttons);
~expandMenu();
};
expandMenu.cpp
#include "expandMenu.h"
// PANNELLO ESTENSIONE
expandMenu::expandMenu(wxWindow* parent, wxPoint pos, std::vector<expandMenuInfo> buttons)
: wxPopupTransientWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS)
{
this->SetPosition(pos);
this->SetSize(50 * buttons.size(), 50);
this->SetBackgroundColour(wxColour(90, 93, 121));
panel = new wxWindow(this, wxID_ANY);
sizer = new wxBoxSizer(wxHORIZONTAL);
// costruisci struttura
for (unsigned int i = 0; i < buttons.size(); i++)
{
wxButton* btn = new wxButton(this, buttons.at(i).id, buttons.at(i).label);
sizer->Add(btn, 1, wxEXPAND);
}
panel->SetSizer(sizer);
}
expandMenu::~expandMenu()
{
}
这是我用于自定义 wxButton 以实际创建弹出窗口的代码(它是临时的):
void ikeButton::rightClick(wxMouseEvent& evt) // CREA PANNELLO ESTENSIONE
{
if (flags & EXPANDABLE)
{
std::vector<expandMenuInfo> buttons;
buttons.push_back(expandMenuInfo(L"sin", 3001));
buttons.push_back(expandMenuInfo(L"cos", 3002));
buttons.push_back(expandMenuInfo(L"tan", 3003));
expandMenu* menu = new expandMenu(this, wxGetMousePosition(), buttons);
menu->Popup();
}
}
提前感谢您的帮助,因为我对这个框架很陌生。
【问题讨论】:
-
为什么?你不能为此创建
wxComboBox吗? -
我希望正弦按钮在左键单击时执行其操作并在右键单击时打开菜单。菜单内的按钮需要放在一个网格中,当其中一个被选中时,我希望正弦按钮变成被按下的按钮。所有这些都可以通过单个 wxComboBox 实现吗?
-
我正在考虑使用 wxComboBox 来选择合适的功能。请查看文档以获取控制屏幕截图和
widgets示例以了解控制行为。