duilib 关于wke 控件焦点问题

转载请说明原出处,谢谢~~

   对象 : 使用着 Redrain 的 uilib , 下载地址: Redrain个人维护并使用的DuiLib和UiLib库源码下载地址 

 问题描述: wke 控件加载网页时, 竖直滚动条, 首次使用滚轮没有反应, 需点击wke控件内部, 后才有响应

   目标: 不需要点击, 直接可响应滚轮消息


  问题分析: 滚轮消息没有响应, 通过点击, 可以响应, 怀疑焦点问题

  方法尝试:  1, 设置 wke 控件  SetFocus();  将焦点设置在wke控件上

                                  (结果) 没有达到效果

                          2,  进入  CWkeWebkitUI  进行源码分析  发现 SetCapture 为设置了  鼠标捕获 绑定了窗口, 于是展示控件加入 

                 SetFocus(m_hWnd);
                 SetCapture(m_hWnd);

                           (结果)没有达到效果

 最终解决方法: CWkeWebkitUI    的友员 CWkeWebkitWnd 类对窗口对行管理, 通过  HandleMessage 进行消息过滤 , 调试跟踪发现 WM_MOUSEMOVE 这个消息  在 OnMouseEvent 事件响应里为 在鼠标刚进入窗口时起响应, 于是尝试在鼠标消息里加入

                       

        源代码   
        if (uMsg == WM_LBUTTONDOWN || uMsg == WM_MBUTTONDOWN || uMsg == WM_RBUTTONDOWN )
        修改后
        if (uMsg == WM_LBUTTONDOWN || uMsg == WM_MBUTTONDOWN || uMsg == WM_RBUTTONDOWN || uMsg == WM_MOUSEMOVE)
	{
		SetFocus(m_hWnd);
		SetCapture(m_hWnd);
	}

 改成这样后, 可以有效果, 直接可以响应滚轮。 但是带来的问题是, 须要 ReleaseCapture 后才能释放焦点, 这时可以利用一个小技巧, 在 OnMouseEvent 里获取鼠标位置

POINT pt;
pt.x = GET_X_LPARAM(lParam);
pt.y = GET_Y_LPARAM(lParam);


其它思路: CWkeWebkitUI 中 DoEvent 可以通过消息 UIEVENT_MOUSEENTER 与 UIEVENT_MOUSELEAVE  判断控件在客户区与离开客户区 , 通过与消息通信, 可以达到更好的效果, 具体的可以进行尝试。


欢迎大家有好的意见留言进行探讨~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值