push一个evtHandler到一个窗口的evtHandler chain中
从以上过程可以看到,wxEvtHandler是一个双向链表节点。每个wxWindow维护着这样一个wxEvtHandler双向链表,GetEvtHandler总是返回列表头。注意,wxWindow本身就是一个wxEvtHandler,初始化,链表里就是this指针,或者说是窗口自己。
去除链表头节点
void wxWindowBase::PushEventHandler(wxEvtHandler *handler)
{
wxEvtHandler *handlerOld = GetEventHandler();
handler->SetNextHandler(handlerOld);
if ( handlerOld )
GetEventHandler()->SetPreviousHandler(handler);
SetEventHandler(handler);
}
从以上过程可以看到,wxEvtHandler是一个双向链表节点。每个wxWindow维护着这样一个wxEvtHandler双向链表,GetEvtHandler总是返回列表头。注意,wxWindow本身就是一个wxEvtHandler,初始化,链表里就是this指针,或者说是窗口自己。
去除链表头节点
wxEvtHandler *wxWindowBase::PopEventHandler(bool deleteHandler)
{
wxEvtHandler *handlerA = GetEventHandler();
if ( handlerA )
{
wxEvtHandler *handlerB = handlerA->GetNextHandler();
handlerA->SetNextHandler((wxEvtHandler *)NULL);
if ( handlerB )
handlerB->SetPr