SOUI官方论坛

 找回密码
 立即注册
查看: 147|回复: 2

为【SWindow】类增加鼠标双击事件

[复制链接]
  • TA的每日心情
    开心
    前天 22:51
  • 签到天数: 946 天

    [LV.10]以坛为家III

    581

    主题

    1343

    帖子

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    28876
    发表于 2022-9-16 19:23:22 | 显示全部楼层 |阅读模式
    一、修改【SOUI】代码
    1、【SEvents.h】enum SOUI_EVENTS中添加一行【EVT_LBUTTONDBCLICK】;
    2、【SEvents.h】中增加:
            SEVENT_BEGIN_EX(EventLBDbClickWnd, EVT_LBUTTONDBCLICK, on_mouse_lbutton_dblick,SOUI_EXP)
                    UINT                        nFlags;
                    POINT                        pt;
            SEVENT_END()
    3、在【SWnd.h】的【SOUI_MSG_MAP_BEGIN()】段中增加
            MSG_WM_LBUTTONDBLCLK(OnLButtonDBClick)
    4、在【SWnd.h】的【protected:】中增加:
            void OnLButtonDBClick(UINT nFlags, CPoint pt);
    5、在【SWnd.cpp】中增加:
            void SWindow::OnLButtonDBClick(UINT nFlags, CPoint pt)
            {
                    if(m_bFocusable) SetFocus();
                    SetCapture();
                    //ModifyState(WndState_PushDown, 0,TRUE);

                    EventLBDbClickWnd evtLButtonDBClick(this);
    evtLButtonDBClick.pt = pt;
                    evtLButtonDBClick.nFlags=nFlags;
                    FireEvent(evtLButtonDBClick);
            }
    二、重新编译SOUI

    三、使用时【即:绑定事件】:
    1、在【你的窗口类文件.h】的【EVENT_MAP_BEGIN()】中增加:
            EVENT_NAME_HANDLER(L"txt_Auto", EVT_LBUTTONDBCLICK, OnAutoTxtEvent)
       在【protected:】中增加:
            void OnAutoTxtEvent(EventArgs *pEvt);
    2、在【你的窗口类文件.cpp】中:
            void CMainDlg::OnAutoTxtEvent(EventArgs *pEvt)
            {
                    //双击事件处理
            }

    【结束】

    1、这样,所有基于SWindow基类的控件,都可以绑定【双击事件】了。
    2、以上这样改法,总感觉哪里不妥。
  • TA的每日心情

    2023-5-5 07:59
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    0

    主题

    2

    帖子

    87

    积分

    24:00金丹期

    Rank: 2

    积分
    87
    发表于 2023-3-6 22:28:19 | 显示全部楼层
    我没有试过下面的订阅,但是在动态订阅window->GetEventSet()->subscribeEvent(EVT_LBUTTONDBCLICK,Subscriber(&SListViewAdapter::OnItemClick, this));是不起作用的,
    经过调试发现要在window的Event中ID号和已有的对不上,后面发现要在window初始化中添加m_evtSet.addEvent(EVENTID(EventLBDbClickWnd));
  • TA的每日心情
    开心
    前天 22:51
  • 签到天数: 946 天

    [LV.10]以坛为家III

    581

    主题

    1343

    帖子

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    28876
     楼主| 发表于 2023-3-8 08:52:43 | 显示全部楼层
    18026678347 发表于 2023-3-6 22:28
    我没有试过下面的订阅,但是在动态订阅window->GetEventSet()->subscribeEvent(EVT_LBUTTONDBCLICK,Subscri ...

    是的,上述流程中忘了添加这个
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|SOUI官方论坛

    GMT+8, 2024-5-18 15:29

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表