|
|
@@ -622,6 +622,12 @@ namespace DuiLib
|
|
|
if (pControl == NULL) break;
|
|
|
if (pControl->GetManager() != this) break;
|
|
|
|
|
|
+ // 滚动条:滑块拖拽/点击由原生鼠标路径(模拟的 WM_LBUTTONDOWN/MOVE/UP)驱动;
|
|
|
+ // 若此处再派发 UIEVENT_TOUCHMOVE 会冒泡到容器把【内容】滚走,与滑块拖拽打架→滑块拖不动、点轨道误翻页。
|
|
|
+ // 直接交回原生鼠标,本函数提前退出(悬浮态由 WM_TOUCH UP 统一清理)。
|
|
|
+ if (pControl->GetInterface(_T("ScrollBar")) != NULL)
|
|
|
+ break;
|
|
|
+
|
|
|
m_pEventTouch = pControl;
|
|
|
m_bTouchMoved = false;
|
|
|
m_ptTouchStart = pt;
|
|
|
@@ -666,9 +672,26 @@ namespace DuiLib
|
|
|
else if (ti.dwFlags & TouchApi::TOUCHEVTFLAG_UP)
|
|
|
{
|
|
|
m_ptLastTouchPos = pt;
|
|
|
- ReleaseCapture();
|
|
|
+
|
|
|
+ // 触屏抬起模拟“鼠标离开”:清除悬浮态。触摸不会生成 WM_MOUSELEAVE,
|
|
|
+ // 否则按钮/列表项点击后悬浮态残留。滚动条等提前退出的触点 m_pEventTouch 为 NULL,同样要清。
|
|
|
+ if (m_pEventHover != NULL)
|
|
|
+ {
|
|
|
+ TEventUI event = { 0 };
|
|
|
+ event.Type = UIEVENT_MOUSELEAVE;
|
|
|
+ event.pSender = m_pEventHover;
|
|
|
+ event.ptMouse = pt;
|
|
|
+ event.wKeyState = MapKeyState();
|
|
|
+ event.dwTimestamp = ::GetTickCount();
|
|
|
+ m_pEventHover->Event(event);
|
|
|
+ m_pEventHover = NULL;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 滚动条等场景本函数未接管(m_pEventTouch 为 NULL),捕获由原生鼠标路径负责,这里不释放。
|
|
|
if (m_pEventTouch == NULL) break;
|
|
|
|
|
|
+ ReleaseCapture();
|
|
|
+
|
|
|
TEventUI event = { 0 };
|
|
|
event.Type = UIEVENT_TOUCHUP;
|
|
|
event.pSender = m_pEventTouch;
|