0

我有一个 wxPanel 类。我需要该类的每个实例都处理一个单击事件。在 wxWidgets 中这可能吗?到目前为止,我总是不得不使用窗口 ID 将事件分配给对象(例如按钮)。
但是这个 wxPanel 即将在屏幕上以乘法方式出现,所以我需要避免使用窗口 ID。

班上:

面板.h

class UVStatusPanel : public wxPanel
{

public:
    UVStatusPanel(wxFrame* parent, int pos);

    void paintEvent(wxPaintEvent& evt);
    void paintNow();

    //THIS is expected to be the event function
    void onClick(wxCommandEvent& WXUNUSED(event));

    bool State(bool state);
    bool State();

    DECLARE_EVENT_TABLE()
private:
    bool painting;
    bool state;
    void render(wxDC &dc);
};

面板.cpp

/**The constructor*/
UVStatusPanel::UVStatusPanel(wxFrame* parent, int pos) :
wxPanel(parent)
{
 /** some align and draw rect code was there**/
 //My two attepmts to assign the click event to the panel
 Connect(this->m_windowId, wxEVT_COMMAND_LEFT_CLICK, 
          wxCommandEventHandler(UVStatusPanel::onClick));
 //EVT_COMMAND_LEFT_CLICK(this->m_windowId,UVStatusPanel::onFocus);
}

当前已注册 noc 点击。谁能解释一下点击事件在 wxWidgets 中是如何工作的?

4

1 回答 1

0

wxEVT_COMMAND_LEFT_CLICK不是由wxPanel(老实说,几乎也不是其他任何东西)生成的,您要查找的事件被调用wxEVT_LEFT_UP,它是 a wxMouseEvent,而不是 a wxCommandEvent

Connect()此外,不建议在您的示例中同时使用事件表。它确实有效,但有令人困惑的风险,只需选择一个并坚持使用它(最好Connect(),或者,如果你使用 2.9+,Bind())。

于 2013-10-30T15:06:06.940 回答