【发布时间】:2014-02-12 12:53:30
【问题描述】:
我尝试实现以实现我自己的自定义事件。如果我从我从(a wxFrame)连接它的类发布它确实有效,但如果它是从子 wxFrame 发布的,它不会被捕获。
自定义事件:
**cFrameFocus.h**
#pragma once
#include <wx\event.h>
class cFrameFocusEvent;
const wxEventTypeTag<cFrameFocusEvent> evtFRAME_FOCUS( wxNewEventType() );
//eventhandler macro
#if _MSC_VER <= 1600
typedef void (wxEvtHandler::*MyFrameFocusEventFunction)(cFrameFocusEvent&);
#define FrameFocusEventHandler(func) wxEVENT_HANDLER_CAST(MyFrameFocusEventFunction,func)
#else
#define FrameFocusEventHandler(func) (&func)
#endif
class cFrameFocusEvent :
public wxEvent
{
wxWindow* m_frame;
public:
cFrameFocusEvent(wxEventType pEventType,int pWinId = wxID_ANY,const wxWindow* pWin = 0);
~cFrameFocusEvent(void);
//impement base class pure virtual
virtual wxEvent* Clone(void)const;
//accessor
wxWindow* GetWindow(void)const;
};
**cFrameFocus.cpp**
#include "cFrameFocus.h"
cFrameFocusEvent::cFrameFocusEvent(wxEventType pEventType,int pWinId,const wxWindow* pWin):
wxEvent(pWinId,pEventType)
{
m_frame = const_cast<wxWindow*>(pWin);
}
cFrameFocusEvent::~cFrameFocusEvent(void)
{
}
wxEvent* cFrameFocusEvent::Clone(void)const{
return new cFrameFocusEvent(*this);
}
wxWindow* cFrameFocusEvent::GetWindow(void)const{
return m_frame;
}
子 Frame 尝试发送偶数:
cFrameFocusEvent* pevent = new cFrameFocusEvent(evtFRAME_FOCUS,GetId(),this);
wxQueueEvent(GetParent(),pevent);
注意:我确实已经偶然发现了这个问题wxWidgets 2.9 custom events,但这对我没有帮助。
【问题讨论】:
-
我认为您需要从
wxCommandEvent派生。
标签: c++ visual-c++ wxwidgets