当前位置: 首页 > 工具软件 > SoUI > 使用案例 >

SOUI总结之事件映射表

饶高雅
2023-12-01

事件映射表

Events.h

所有的系统内置控件的事件都在这里

enum SOUI_EVENTS

{

    EVT_INIT=8000,

    EVT_EXIT,

    EVT_TIMER,

    //基本窗口事件

    EVT_SETFOCUS=8100,

    EVT_KILLFOCUS,

    EVT_CREATE,

    EVT_DESTROY,

    EVT_SIZE,

    EVT_VISIBLECHANGED,

    EVT_STATECHANGED,

   EVT_LBUTTONDOWN,

   EVT_LBUTTONUP,

   EVT_UPDATE_TOOLTIP,

   EVT_KEYDOWN=8200,

    //两个窗口鼠标状态事件

    EVT_MOUSE_HOVER=9000,

    EVT_MOUSE_LEAVE,

   

    EVT_CMD=10000,

    EVT_CTXMENU,

   

    //增加两个滚动VIEW的事件

    EVT_SCROLLVIEW_ORIGINCHANGED,

    EVT_SCROLLVIEW_SIZECHANGED,

    EVT_SCROLL,

    EVT_OFEVENT,    //消息二次包装

    EVT_OFPANEL,    //一个itemPanel中的消息的二次包装

    //增加4个itempanel相关的事件,经过EVT_OFPANEL到达应用层

    EVT_ITEMPANEL_CLICK,

    EVT_ITEMPANEL_DBCLICK,

    EVT_ITEMPANEL_RCLICK,

    EVT_ITEMPANEL_HOVER,

    EVT_ITEMPANEL_LEAVE,

   

    EVT_TAB_SELCHANGING=11000,

    EVT_TAB_SELCHANGED,

    EVT_TAB_ITEMHOVER,

    EVT_TAB_ITEMLEAVE,

    EVT_LB_SELCHANGING=12000,

    EVT_LB_SELCHANGED,

   EVT_LB_DBCLICK,

    EVT_LC_SELCHANGING=13000,

    EVT_LC_SELCHANGED,

    EVT_LC_ITEMDELETED,

   EVT_LC_DBCLICK,

   EVT_TV_SELCHANGING = 14000,

    EVT_TV_SELCHANGED,

   

    EVT_TC_SELCHANGING=15000,

    EVT_TC_SELCHANGED,

    EVT_TC_EXPAND,

    EVT_TC_CHECKSTATE,

    EVT_TC_DBCLICK,    //treectrl的叶子节点双击事件, add by zhaosheng

   

    EVT_LV_SELCHANGING = 15100,

    EVT_LV_SELCHANGED,

    EVT_LV_ITEMCLICK,

   

    EVT_RE_NOTIFY=16000,

    EVT_RE_MENU,

   

    EVT_SLIDER_POS=17000,

    EVT_HEADER_CLICK=18000,

    EVT_HEADER_ITEMCHANGING,

    EVT_HEADER_ITEMCHANGED,

    EVT_HEADER_ITEMSWAP,

    EVT_CB_SELCHANGE=19000,

   EVT_CB_DROPDOWN,

    EVT_CALENDAR_SELDAY=20000,

    EVT_CALENDAR_SETDATE,

   EVT_CALENDAREX_CHANGED,

   EVT_DATETIME_CHANGED,

   

    EVT_SPIN_VALUE2STRING = 21000,

  

    EVT_SPLIT_PANE_MOVED  = 22000,

   EVT_HOT_KEY_SET = 23000,

   

   //图片动画开始,结束事件

   EVT_ANI_START   = 22100,

   EVT_ANI_STOP,

   EVT_SELECTMENU = 22150,

    EVT_EXTERNAL_BEGIN=10000000,

};

将枚举的事件放在一个宏定义中;

SEVENT_BEGIN_EX(EventCBSelChange, EVT_CB_SELCHANGE, on_combobox_sel_change, SOUI_EXP)

   int nCurSel;

SEVENT_END()

宏定义的写法

#define SEVENT_BEGIN_EX(evt,id,evt_name, api) \

class evt : public SOUI::EventArgs \

{ \

public:\

   virtual int GetID() const { return evt::EventID; }\

   virtual LPCWSTR GetName() const { return evt::GetClassName(); }\

   SOUI_CLASS_NAME(evt,L#evt_name ) \

   enum {\

      EventID = id\

   };\

   evt(SObject *pSender) :EventArgs(pSender){}\

#define EVT_EXP

#define SEVENT_BEGIN(evt,id) \

SEVENT_BEGIN_EX(evt,id,L"on_"#evt, EVT_EXP)

#define SEVENT_END()\

};

自己定义一个comboobx的下拉选择事件

EVENT_NAME_HANDLER(L"comHisModuleSel",EventCBSelChange::EventID,OnCBSelChange)

响应函数的声明与定义

void OnCBSelChange(EventArgs* pEvt);

void OnCBSelChange (EventArgs *e)

{

   EventCBSelChange *e2=sobj_cast<EventCBSelChange>(e);

   SComboBox *pCbx = sobj_cast<SComboBox>(e2->sender);

   if(e2->nCurSel!=-1)

   {

      SStringT str = pCbx->GetLBText(e2->nCurSel);

      str=str.Mid(1,str.GetLength()-1-strlen("Interpolator"));

      IInterpolator * pInterpolator = CREATEINTERPOLATOR(S_CT2W(str));

      if(pInterpolator)

      {

         SInterpolatorView *pView = FindChildByID2<SInterpolatorView>(R.id.view_interpolator);

         pView->SetInterpolator(pInterpolator);

         pInterpolator->Release();

      }

   }

}

其余事件的写法基本类似。

msgcrack.h

宏定义EVENT_MAP_BEGIN()

处理控件的事件;

宏定义BEGIN_MSG_MAP_EX(CMainDlg)

处理这个窗口类的一些时间

例:

EVENT_MAP_BEGIN()

   EVENT_NAME_COMMAND(L"btn_close", OnClose)

   EVENT_NAME_COMMAND(L"btn_min", OnMinimize)

   EVENT_NAME_COMMAND(L"btn_max", OnMaximize)

   EVENT_NAME_COMMAND(L"btn_restore", OnRestore)

   EVENT_NAME_COMMAND(L"btn_menu", OnMenu)

   EVENT_NAME_COMMAND(L"btn_skin", OnSkin)

EVENT_ID_RANGE_HANDLER(10,27,EVT_CMD,OnSetSkin)

  EVENT_NAME_HANDLER(L"comHisModuleSel",EventCBSelChange::EventID,OnCBSelChange)

   EVENT_NAME_HANDLER(L"listModule",EventLBDbClick::EventID,OnLBDbClick)

   EVENT_NAME_HANDLER(L"listModule",EVT_INIT,OnLBDbClick)

EVENT_MAP_END()

  

BEGIN_MSG_MAP_EX(CMainDlg)

   MSG_WM_CREATE(OnCreate)

   MSG_WM_INITDIALOG(OnInitDialog)

   MESSAGE_HANDLER(g_dwSkinChangeMessage, OnSkinChange)

   MSG_WM_CLOSE(OnClose)

   MSG_WM_SIZE(OnSize)

   MSG_WM_COMMAND(OnCommand)

  

   CHAIN_MSG_MAP(SHostWnd)

   REFLECT_NOTIFICATIONS_EX()

END_MSG_MAP()

上例中MSG_WM_CREATE,MSG_WM_INITDIALOG等都是此头文件中的宏定义。

自定义消息

1.消息定义

#define WM_MYMSG (WM_USER+1)

2.消息循环

BEGIN_MSG_MAP_EX(CMainDlg)

MESSAGE_HANDLER(WM_MYMSG,OnMyMsg)

END_MSG_MAP()

3.消息声明和处理

LRESULT OnMyMsg(UINT uMsg,WPARAM wp,LPARAM lp,BOOL & bHandled);

LRESULT OnMyMsg(UINT uMsg,WPARAM wp,LPARAM lp,BOOL & bHandled)

{

return 0;

}

4.发送消息

SendMessage(m_hWnd, MSG_SERIAL_WRITE, (WPARAM)buff, (LPARAM)nBuffBytes);

函数也可以是PostMessage。

 类似资料: