将鼠标事件连接到wxStaticBitmap(wx 2.8)

Connect mouse event to wxStaticBitmap (wx 2.8)

本文关键字:wx wxStaticBitmap 鼠标 事件 连接      更新时间:2023-10-16

嗨,伙计们,我来这里是为了打败死马。。

基本上,我所做的就是把东西分配到地图上。

地图:用户上传的带有背景的wxStaticBitmap对象炸弹(lol):一个wxStaticBitmap对象

我现在用wxMemoryDC+wxDC把炸弹合并到地图上的任意位置。

然而,我完全被鼠标设置"炸弹"卡住了。我想点击地图上的某个地方,不知怎么的,炸弹就会落在我刚刚点击的位置。

我尝试了wxMouseEvent和EVT_MOTION(好吧,就像上面声明的宏一样)显然,它们只适用于wxWindow或wxFrame。

我想知道如何通过Connect()将鼠标事件绑定到静态位图,但我没有找到关于炸弹分配的正确用法。。。

我找到的最好、最简单的解决方案是将自己的事件处理程序连接到wxStaticBitmap,如下所示:

sb->Connect(wxID_ANY,wxEVT_MOTION,
    wxMouseEventHandler(MyFrame::OnMouse),NULL,this);

通常,最好创建一个wxPanel作为框架的子级,然后将所有小部件创建为wxPanel的子级。通过这种方式,大多数事情都能像你自然期望的那样工作,你会遇到更少的麻烦。

您可以这样连接鼠标移动、鼠标左键向下和鼠标左键向上:

thiri = new wxStaticBitmap(this, wxID_ANY, wxImage(966, 680), /*image start point*/wxPoint(0,0), /* canvas size to display*/ wxSize(966, 680));
// mouse event on image
thiri->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler(Panel::OnMouseLeftDown), NULL, this );
thiri->Connect( wxEVT_MOTION, wxMouseEventHandler(Panel::OnMouseMove), NULL, this );
thiri->Connect( wxEVT_LEFT_UP, wxMouseEventHandler(Panel::OnMouseLeftUp), NULL, this);