wxBitmapButton读取类参数

时间:2015-01-17 13:01:22

标签: c++ class parameters wxwidgets

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

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

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

1 个答案:

答案 0 :(得分:1)

我认为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 ++使事情变得如此美好和轻松,我无法抗拒......