|
|
@@ -1,4 +1,5 @@
|
|
|
#include "StdAfx.h"
|
|
|
+#include <windows.h>
|
|
|
#include <zmouse.h>
|
|
|
// [触屏诊断] 显式引入,避免依赖 tchar.h 的传递包含
|
|
|
#include <stdio.h>
|
|
|
@@ -992,9 +993,11 @@ namespace DuiLib
|
|
|
? Touch_SnapIntoScrollBar(m_pEventTouch, pt) : pt;
|
|
|
event.dwTimestamp = ::GetTickCount();
|
|
|
event.wKeyState = MapKeyState();
|
|
|
- TouchTrace::Log(_T("TOUCHUP touch=%s moved=%d hover=%p leaveArr=%d click=%p capture=%d"),
|
|
|
+ TouchTrace::Log(_T("TOUCHUP touch=%s moved=%d hover=%p leaveArr=%d click=%p capture=%d clickName=%s clickCls=%s"),
|
|
|
m_pEventTouch->GetName().GetData(), (int)m_bTouchMoved, (void*)m_pEventHover,
|
|
|
- m_aNeedMouseLeaveNeeded.GetSize(), (void*)m_pEventClick, (int)m_bMouseCapture);
|
|
|
+ m_aNeedMouseLeaveNeeded.GetSize(), (void*)m_pEventClick, (int)m_bMouseCapture,
|
|
|
+ m_pEventClick != NULL ? m_pEventClick->GetName().GetData() : _T("null"),
|
|
|
+ m_pEventClick != NULL ? m_pEventClick->GetClass() : _T("null"));
|
|
|
m_pEventTouch->Event(event);
|
|
|
|
|
|
if (m_pEventClick != NULL && !m_bTouchMoved
|
|
|
@@ -1002,6 +1005,8 @@ namespace DuiLib
|
|
|
{
|
|
|
CControlUI* pClick = m_pEventClick;
|
|
|
m_pEventClick = NULL;
|
|
|
+ TouchTrace::Log(_T("TOUCHUP click-candidate %s cls=%s pt=%d,%d"),
|
|
|
+ pClick->GetName().GetData(), pClick->GetClass(), pt.x, pt.y);
|
|
|
TEventUI clickEvent = { 0 };
|
|
|
clickEvent.Type = UIEVENT_BUTTONDOWN;
|
|
|
clickEvent.pSender = pClick;
|
|
|
@@ -1015,6 +1020,8 @@ namespace DuiLib
|
|
|
}
|
|
|
else if (m_pEventClick != NULL)
|
|
|
{
|
|
|
+ TouchTrace::Log(_T("TOUCHUP drop-candidate %s cls=%s moved=%d"),
|
|
|
+ m_pEventClick->GetName().GetData(), m_pEventClick->GetClass(), (int)m_bTouchMoved);
|
|
|
// 拖动或滚动条触摸从未发送 BUTTONDOWN,直接丢弃候选点击。
|
|
|
m_pEventClick = NULL;
|
|
|
}
|
|
|
@@ -1562,12 +1569,22 @@ namespace DuiLib
|
|
|
|
|
|
bool CPaintManagerUI::PreMessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lRes)
|
|
|
{
|
|
|
+ if (uMsg == WM_TOUCH || uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONUP || uMsg == WM_MOUSEMOVE)
|
|
|
+ {
|
|
|
+ TouchTrace::Log(_T("PRE-HANDLER enter hwnd=%p manager=%p msg=0x%04X w=0x%p l=0x%p"),
|
|
|
+ (void*)m_hWndPaint, (void*)this, uMsg, (void*)wParam, (void*)lParam);
|
|
|
+ }
|
|
|
for (int i = 0; i < m_aPreMessageFilters.GetSize(); i++)
|
|
|
{
|
|
|
bool bHandled = false;
|
|
|
LRESULT lResult = static_cast<IMessageFilterUI*>(m_aPreMessageFilters[i])->MessageHandler(uMsg, wParam, lParam, bHandled);
|
|
|
if (bHandled)
|
|
|
{
|
|
|
+ if (uMsg == WM_TOUCH || uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONUP || uMsg == WM_MOUSEMOVE)
|
|
|
+ {
|
|
|
+ TouchTrace::Log(_T("PRE-HANDLER filter-consumed hwnd=%p manager=%p filter=%p msg=0x%04X res=0x%p"),
|
|
|
+ (void*)m_hWndPaint, (void*)this, (void*)m_aPreMessageFilters[i], uMsg, (void*)lResult);
|
|
|
+ }
|
|
|
lRes = lResult;
|
|
|
return true;
|
|
|
}
|
|
|
@@ -1627,6 +1644,12 @@ namespace DuiLib
|
|
|
bool CPaintManagerUI::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lRes)
|
|
|
{
|
|
|
if (m_hWndPaint == NULL) return false;
|
|
|
+ if (uMsg == WM_TOUCH || uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONUP || uMsg == WM_MOUSEMOVE)
|
|
|
+ {
|
|
|
+ TouchTrace::Log(_T("MSG-HANDLER enter hwnd=%p manager=%p msg=0x%04X w=0x%p l=0x%p touch=%p suppress=%d"),
|
|
|
+ (void*)m_hWndPaint, (void*)this, uMsg, (void*)wParam, (void*)lParam,
|
|
|
+ (void*)m_pEventTouch, (int)m_bSuppressPromotedTouchMouse);
|
|
|
+ }
|
|
|
if (uMsg == WM_TOUCH || uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONUP)
|
|
|
{
|
|
|
TouchTrace::Log(_T("MANAGER-MSG hwnd=%p manager=%p msg=0x%04X w=0x%p l=0x%p touch=%p suppress=%d"),
|
|
|
@@ -1662,6 +1685,11 @@ namespace DuiLib
|
|
|
LRESULT lResult = static_cast<IMessageFilterUI*>(m_aMessageFilters[i])->MessageHandler(uMsg, wParam, lParam, bHandled);
|
|
|
if (bHandled)
|
|
|
{
|
|
|
+ if (uMsg == WM_TOUCH || uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONUP || uMsg == WM_MOUSEMOVE)
|
|
|
+ {
|
|
|
+ TouchTrace::Log(_T("MSG-HANDLER filter-consumed hwnd=%p manager=%p filter=%p msg=0x%04X res=0x%p"),
|
|
|
+ (void*)m_hWndPaint, (void*)this, (void*)m_aMessageFilters[i], uMsg, (void*)lResult);
|
|
|
+ }
|
|
|
lRes = lResult;
|
|
|
switch (uMsg)
|
|
|
{
|
|
|
@@ -2448,7 +2476,12 @@ namespace DuiLib
|
|
|
// WM_TOUCH 后 Windows 可能补发 WM_LBUTTONDOWN。触摸点击由 TOUCHUP
|
|
|
// 的 tap 判定统一处理,不能让这条合成消息提前建立鼠标点击状态。
|
|
|
if (m_pEventTouch != NULL || m_bSuppressPromotedTouchMouse)
|
|
|
+ {
|
|
|
+ TouchTrace::Log(_T("LBUTTONDOWN swallowed by touch-state touch=%s suppress=%d"),
|
|
|
+ m_pEventTouch != NULL ? m_pEventTouch->GetName().GetData() : _T("null"),
|
|
|
+ (int)m_bSuppressPromotedTouchMouse);
|
|
|
break;
|
|
|
+ }
|
|
|
// We alway set focus back to our app (this helps
|
|
|
// when Win32 child windows are placed on the dialog
|
|
|
// and we need to remove them on focus change).
|
|
|
@@ -2540,6 +2573,9 @@ namespace DuiLib
|
|
|
// 绕过该判定触发 BUTTONUP。
|
|
|
if (m_pEventTouch != NULL || m_bSuppressPromotedTouchMouse)
|
|
|
{
|
|
|
+ TouchTrace::Log(_T("LBUTTONUP swallowed by touch-state touch=%s suppress=%d"),
|
|
|
+ m_pEventTouch != NULL ? m_pEventTouch->GetName().GetData() : _T("null"),
|
|
|
+ (int)m_bSuppressPromotedTouchMouse);
|
|
|
m_bSuppressPromotedTouchMouse = false;
|
|
|
break;
|
|
|
}
|
|
|
@@ -4954,6 +4990,7 @@ namespace DuiLib
|
|
|
UINT uStyle = GetWindowStyle(pMsg->hwnd);
|
|
|
UINT uChildRes = uStyle & WS_CHILD;
|
|
|
LRESULT lRes = 0;
|
|
|
+ const bool bTraceTouch = (pMsg->message == WM_TOUCH || pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONUP || pMsg->message == WM_MOUSEMOVE);
|
|
|
if (uChildRes != 0)
|
|
|
{
|
|
|
HWND hWndParent = ::GetParent(pMsg->hwnd);
|
|
|
@@ -4966,10 +5003,30 @@ namespace DuiLib
|
|
|
{
|
|
|
if (pMsg->hwnd == pT->GetPaintWindow() || hTempParent == pT->GetPaintWindow())
|
|
|
{
|
|
|
+ if (bTraceTouch)
|
|
|
+ {
|
|
|
+ TouchTrace::Log(_T("TRANSLATE match(child) msg=0x%04X src=%p target=%p parent=%p"),
|
|
|
+ pMsg->message, (void*)pMsg->hwnd, (void*)pT->GetPaintWindow(), (void*)hTempParent);
|
|
|
+ }
|
|
|
if (pT->TranslateAccelerator(pMsg))
|
|
|
+ {
|
|
|
+ if (bTraceTouch)
|
|
|
+ {
|
|
|
+ TouchTrace::Log(_T("TRANSLATE accel-consumed(child) msg=0x%04X target=%p"),
|
|
|
+ pMsg->message, (void*)pT->GetPaintWindow());
|
|
|
+ }
|
|
|
return true;
|
|
|
+ }
|
|
|
|
|
|
- pT->PreMessageHandler(pMsg->message, pMsg->wParam, pMsg->lParam, lRes);
|
|
|
+ if (pT->PreMessageHandler(pMsg->message, pMsg->wParam, pMsg->lParam, lRes))
|
|
|
+ {
|
|
|
+ if (bTraceTouch)
|
|
|
+ {
|
|
|
+ TouchTrace::Log(_T("TRANSLATE pre-consumed(child) msg=0x%04X target=%p res=0x%p"),
|
|
|
+ pMsg->message, (void*)pT->GetPaintWindow(), (void*)lRes);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|
|
|
hTempParent = GetParent(hTempParent);
|
|
|
}
|
|
|
@@ -4982,16 +5039,45 @@ namespace DuiLib
|
|
|
CPaintManagerUI* pT = static_cast<CPaintManagerUI*>(m_aPreMessages[i]);
|
|
|
if (pMsg->hwnd == pT->GetPaintWindow())
|
|
|
{
|
|
|
+ if (bTraceTouch)
|
|
|
+ {
|
|
|
+ TouchTrace::Log(_T("TRANSLATE match(top) msg=0x%04X src=%p target=%p"),
|
|
|
+ pMsg->message, (void*)pMsg->hwnd, (void*)pT->GetPaintWindow());
|
|
|
+ }
|
|
|
if (pT->TranslateAccelerator(pMsg))
|
|
|
+ {
|
|
|
+ if (bTraceTouch)
|
|
|
+ {
|
|
|
+ TouchTrace::Log(_T("TRANSLATE accel-consumed(top) msg=0x%04X target=%p"),
|
|
|
+ pMsg->message, (void*)pT->GetPaintWindow());
|
|
|
+ }
|
|
|
return true;
|
|
|
+ }
|
|
|
|
|
|
if (pT->PreMessageHandler(pMsg->message, pMsg->wParam, pMsg->lParam, lRes))
|
|
|
+ {
|
|
|
+ if (bTraceTouch)
|
|
|
+ {
|
|
|
+ TouchTrace::Log(_T("TRANSLATE pre-consumed(top) msg=0x%04X target=%p res=0x%p"),
|
|
|
+ pMsg->message, (void*)pT->GetPaintWindow(), (void*)lRes);
|
|
|
+ }
|
|
|
return true;
|
|
|
+ }
|
|
|
|
|
|
+ if (bTraceTouch)
|
|
|
+ {
|
|
|
+ TouchTrace::Log(_T("TRANSLATE no-consume(top) msg=0x%04X target=%p"),
|
|
|
+ pMsg->message, (void*)pT->GetPaintWindow());
|
|
|
+ }
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ if (bTraceTouch)
|
|
|
+ {
|
|
|
+ TouchTrace::Log(_T("TRANSLATE no-match msg=0x%04X src=%p child=%u"),
|
|
|
+ pMsg->message, (void*)pMsg->hwnd, (unsigned)uChildRes);
|
|
|
+ }
|
|
|
return false;
|
|
|
}
|
|
|
|