gpt4 book ai didi

c++ - wxBitmapButton 读取类参数

转载 作者:行者123 更新时间:2023-11-28 06:28:56 25 4
gpt4 key购买 nike

几个小时以来,我一直在尝试解决这个问题,但我的 wxWidgets 知识(我是初学者)和在线寻找答案都没有帮助我解决这个问题。

我创建了一个名为 Field 的类,其中包含三个参数 int xint ywxBitmapButton 按钮 .现在,我想要做的是,当单击 button 时,连接到该 button 的事件处理程序将读取 x y 来自包含所用按钮相同 类实例。

本质上,我想要实现的是通过单击 Field::按钮来读取给定的坐标 Field::x、Field::y。有人可以帮我完成这项任务吗?

最佳答案

我假设 Field 本身不是小部件(如果是,情况类似,您只需更改它的创建方式)。一种写法是:

struct Field
{
Field(int x_, int y_) : x(x_), y(y_) { }

void set_button(wxBitmapButton* btn)
{
button = btn;
button->Bind(wxEVT_BUTTON, [this](wxCommandEvent&)
{
//Do whatever you want with x and y
//(they're accessed through the captured this pointer).
//For example:
wxMessageBox(std::to_wstring(x) + ", " + std::to_wstring(y));
});
}

int x;
int y;
wxBitmapButton* button = nullptr;
};

要测试它,您可以创建一个像这样的简单窗口:

struct test_frame : wxFrame
{
test_frame() : wxFrame(nullptr, wxID_ANY, L"Test"), fld(3, 7) { }

//fld doesn't have to be a member of the wxFrame-derived class;
//it just needs to live at least as long as the button it references.
//This is just an example that satisfies that condition.
Field fld;
};

然后像这样初始化一切:

auto main_frame = new test_frame();
auto btn = new wxBitmapButton(main_frame, wxID_ANY, your_bitmap);
main_frame->fld.set_button(btn);
main_frame->Show();

您将弹出一个显示 3、7 的消息框(或者当然是 xy 中的任何值)单击按钮时。


所有这些代码都假定您有一个相当最新的编译器——如您所见,它使用了相当多的 C++11 功能。当然,这一切都可以通过许多其他方式完成,但是现代 C++ 使事情变得如此美好和简单,我无法抗拒...

关于c++ - wxBitmapButton 读取类参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27999723/

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