Procházet zdrojové kódy

触屏滑动没问题了

张洋 před 4 měsíci
rodič
revize
1b5afc5d4d
1 změnil soubory, kde provedl 28 přidání a 28 odebrání
  1. 28 28
      zhipuzi_pos_windows/ui/TouchWindowBase.cpp

+ 28 - 28
zhipuzi_pos_windows/ui/TouchWindowBase.cpp

@@ -1,9 +1,9 @@
-#include "TouchWindowBase.h"
+锘�#include "TouchWindowBase.h"
 #include <vector>
 #include <vector>
 #include <cmath>
 #include <cmath>
 
 
 #ifndef TOUCH_COORD_TO_PIXEL
 #ifndef TOUCH_COORD_TO_PIXEL
-// TOUCH 输入单位是 1/100 英寸,通常使用这个宏转换为像素
+// TOUCH 杈撳叆鍗曚綅鏄� 1/100 鑻卞�锛岄€氬父浣跨敤杩欎釜瀹忚浆鎹�负鍍忕礌
 #define TOUCH_COORD_TO_PIXEL(l) ((l) / 100)
 #define TOUCH_COORD_TO_PIXEL(l) ((l) / 100)
 #endif
 #endif
 
 
@@ -27,7 +27,7 @@ void TouchWindowBase::AddTouchSample(LONG y)
 	std::int64_t t = NowMs();
 	std::int64_t t = NowMs();
 	m_samples.push_back({ t, y });
 	m_samples.push_back({ t, y });
 
 
-	// 保留时间窗口或最大条目数
+	// 淇濈暀鏃堕棿绐楀彛鎴栨渶澶ф潯鐩�暟
 	while (!m_samples.empty() && (t - m_samples.front().tms) > SAMPLE_WINDOW_MS)
 	while (!m_samples.empty() && (t - m_samples.front().tms) > SAMPLE_WINDOW_MS)
 		m_samples.pop_front();
 		m_samples.pop_front();
 
 
@@ -43,7 +43,7 @@ void TouchWindowBase::StartInertia(float velocityPxPerMs)
 	m_inertiaVelocityPxPerMs = velocityPxPerMs;
 	m_inertiaVelocityPxPerMs = velocityPxPerMs;
 	if (std::abs(m_inertiaVelocityPxPerMs) < MIN_INERTIA_VELOCITY)
 	if (std::abs(m_inertiaVelocityPxPerMs) < MIN_INERTIA_VELOCITY)
 	{
 	{
-		// 速度太小,不启动惯性
+		// 閫熷害澶�皬锛屼笉鍚�姩鎯�€�
 		m_inertiaActive = false;
 		m_inertiaActive = false;
 		return;
 		return;
 	}
 	}
@@ -69,7 +69,7 @@ LRESULT TouchWindowBase::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 	switch (uMsg)
 	switch (uMsg)
 	{
 	{
 		case WM_CREATE:
 		case WM_CREATE:
-			// 注册接收触摸(移除:由外部窗口统一注册,避免重复注册)
+			// 娉ㄥ唽鎺ユ敹瑙︽懜锛堢Щ闄わ細鐢卞�閮ㄧ獥鍙g粺涓€娉ㄥ唽锛岄伩鍏嶉噸澶嶆敞鍐岋級
 			// ::RegisterTouchWindow(m_hWnd, 0);
 			// ::RegisterTouchWindow(m_hWnd, 0);
 			break;
 			break;
 
 
@@ -86,14 +86,14 @@ LRESULT TouchWindowBase::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 					pt.x = TOUCH_COORD_TO_PIXEL(ti.x);
 					pt.x = TOUCH_COORD_TO_PIXEL(ti.x);
 					pt.y = TOUCH_COORD_TO_PIXEL(ti.y);
 					pt.y = TOUCH_COORD_TO_PIXEL(ti.y);
 
 
-					// 把屏幕坐标转换为目标 paint 窗口客户区坐标
+					// 鎶婂睆骞曞潗鏍囪浆鎹�负鐩�爣 paint 绐楀彛瀹㈡埛鍖哄潗鏍�
 					HWND target = m_hWndPaint ? m_hWndPaint : m_hWnd;
 					HWND target = m_hWndPaint ? m_hWndPaint : m_hWnd;
 					ScreenToClient(target, &pt);
 					ScreenToClient(target, &pt);
 
 
-					// 触摸按下
+					// 瑙︽懜鎸変笅
 					if (ti.dwFlags & TOUCHEVENTF_DOWN)
 					if (ti.dwFlags & TOUCHEVENTF_DOWN)
 					{
 					{
-						// 停止可能正在进行的惯性
+						// 鍋滄�鍙�兘姝e湪杩涜�鐨勬儻鎬�
 						StopInertia();
 						StopInertia();
 
 
 						m_touchDown = true;
 						m_touchDown = true;
@@ -102,18 +102,18 @@ LRESULT TouchWindowBase::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 						m_samples.clear();
 						m_samples.clear();
 						AddTouchSample(pt.y);
 						AddTouchSample(pt.y);
 
 
-						// 保存最后触摸点(用于惯性期间发送位置)
+						// 淇濆瓨鏈€鍚庤Е鎽哥偣锛堢敤浜庢儻鎬ф湡闂村彂閫佷綅缃�級
 						m_lastTouchPt = pt;
 						m_lastTouchPt = pt;
 
 
 						::PostMessage(target, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(pt.x, pt.y));
 						::PostMessage(target, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(pt.x, pt.y));
 						::SetCapture(target);
 						::SetCapture(target);
 					}
 					}
-					// 触摸移动
+					// 瑙︽懜绉诲姩
 					else if (ti.dwFlags & TOUCHEVENTF_MOVE)
 					else if (ti.dwFlags & TOUCHEVENTF_MOVE)
 					{
 					{
 						if (m_touchDown)
 						if (m_touchDown)
 						{
 						{
-							LONG dy = m_lastY - pt.y; // 向上移动产生正的滚轮增量
+							LONG dy = pt.y - m_lastY; // 鎸夋墜鏈轰範鎯�細鎵嬫寚涓婃粦(鍧愭爣鍑忓皬) -> 璐熷�閲�
 							m_lastY = pt.y;
 							m_lastY = pt.y;
 
 
 							AddTouchSample(pt.y);
 							AddTouchSample(pt.y);
@@ -121,10 +121,10 @@ LRESULT TouchWindowBase::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 							int wheelUnits = static_cast<int>(dy * PIXEL_TO_WHEEL);
 							int wheelUnits = static_cast<int>(dy * PIXEL_TO_WHEEL);
 							m_accumWheel += wheelUnits;
 							m_accumWheel += wheelUnits;
 
 
-							// 更新最后触摸点(用于惯性期间发送位置)
+							// 鏇存柊鏈€鍚庤Е鎽哥偣锛堢敤浜庢儻鎬ф湡闂村彂閫佷綅缃�級
 							m_lastTouchPt = pt;
 							m_lastTouchPt = pt;
 
 
-							// 每当累积达到 WHEEL_DELTA 就发送一次 WM_MOUSEWHEEL
+							// 姣忓綋绱�Н杈惧埌 WHEEL_DELTA 灏卞彂閫佷竴娆� WM_MOUSEWHEEL
 							while (abs(m_accumWheel) >= WHEEL_DELTA)
 							while (abs(m_accumWheel) >= WHEEL_DELTA)
 							{
 							{
 								int sendDelta = (m_accumWheel > 0) ? WHEEL_DELTA : -WHEEL_DELTA;
 								int sendDelta = (m_accumWheel > 0) ? WHEEL_DELTA : -WHEEL_DELTA;
@@ -135,16 +135,16 @@ LRESULT TouchWindowBase::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 								::PostMessage(target, WM_MOUSEWHEEL, wParamWheel, lParamPos);
 								::PostMessage(target, WM_MOUSEWHEEL, wParamWheel, lParamPos);
 							}
 							}
 
 
-							// 仍然发送鼠标移动,兼容需要拖拽的控件
+							// 浠嶇劧鍙戦€侀紶鏍囩Щ鍔�紝鍏煎�闇€瑕佹嫋鎷界殑鎺т欢
 							::PostMessage(target, WM_MOUSEMOVE, MK_LBUTTON, MAKELPARAM(pt.x, pt.y));
 							::PostMessage(target, WM_MOUSEMOVE, MK_LBUTTON, MAKELPARAM(pt.x, pt.y));
 						}
 						}
 					}
 					}
-					// 触摸抬起
+					// 瑙︽懜鎶�捣
 					else if (ti.dwFlags & TOUCHEVENTF_UP)
 					else if (ti.dwFlags & TOUCHEVENTF_UP)
 					{
 					{
 						if (m_touchDown)
 						if (m_touchDown)
 						{
 						{
-							// 计算速度(px/ms)
+							// 璁$畻閫熷害锛坧x/ms锛�
 							float velocityPxPerMs = 0.0f;
 							float velocityPxPerMs = 0.0f;
 							if (m_samples.size() >= 2)
 							if (m_samples.size() >= 2)
 							{
 							{
@@ -153,13 +153,13 @@ LRESULT TouchWindowBase::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 								std::int64_t dt = last.tms - first.tms;
 								std::int64_t dt = last.tms - first.tms;
 								if (dt > 0)
 								if (dt > 0)
 								{
 								{
-									// 使用 earliest - latest,保持上方移动为正值
-									velocityPxPerMs = static_cast<float>(first.y - last.y) / static_cast<float>(dt);
+									// 涓� MOVE 涓� dy 鏂瑰悜淇濇寔涓€鑷达細last - first
+									velocityPxPerMs = static_cast<float>(last.y - first.y) / static_cast<float>(dt);
 								}
 								}
 							}
 							}
 
 
 							m_touchDown = false;
 							m_touchDown = false;
-							// 保存最后触摸点(确保惯性期间有位置可用)
+							// 淇濆瓨鏈€鍚庤Е鎽哥偣锛堢‘淇濇儻鎬ф湡闂存湁浣嶇疆鍙�敤锛�
 							m_lastTouchPt = pt;
 							m_lastTouchPt = pt;
 							m_lastY = 0;
 							m_lastY = 0;
 							m_accumWheel = 0;
 							m_accumWheel = 0;
@@ -168,7 +168,7 @@ LRESULT TouchWindowBase::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 							::PostMessage(target, WM_LBUTTONUP, 0, MAKELPARAM(pt.x, pt.y));
 							::PostMessage(target, WM_LBUTTONUP, 0, MAKELPARAM(pt.x, pt.y));
 							::ReleaseCapture();
 							::ReleaseCapture();
 
 
-							// 启动惯性滚动(如果速度足够大)
+							// 鍚�姩鎯�€ф粴鍔�紙濡傛灉閫熷害瓒冲�澶э級
 							StartInertia(velocityPxPerMs);
 							StartInertia(velocityPxPerMs);
 						}
 						}
 					}
 					}
@@ -177,9 +177,9 @@ LRESULT TouchWindowBase::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 			}
 			}
 			else
 			else
 			{
 			{
-				// 可添加日志:GetTouchInputInfo 失败
+				// 鍙�坊鍔犳棩蹇楋細GetTouchInputInfo 澶辫触
 			}
 			}
-			return 0; // 已处理
+			return 0; // 宸插�鐞�
 		}
 		}
 
 
 		case WM_TIMER:
 		case WM_TIMER:
@@ -192,14 +192,14 @@ LRESULT TouchWindowBase::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 				if (dt <= 0) dt = INERTIA_TIMER_INTERVAL_MS;
 				if (dt <= 0) dt = INERTIA_TIMER_INTERVAL_MS;
 				m_lastInertiaTms = now;
 				m_lastInertiaTms = now;
 
 
-				// 计算本帧移动的像素
+				// 璁$畻鏈�抚绉诲姩鐨勫儚绱�
 				float pixels = m_inertiaVelocityPxPerMs * static_cast<float>(dt);
 				float pixels = m_inertiaVelocityPxPerMs * static_cast<float>(dt);
 
 
-				// 将像素转换为 wheel units 累积并发送
+				// 灏嗗儚绱犺浆鎹�负 wheel units 绱�Н骞跺彂閫�
 				int wheelUnits = static_cast<int>(pixels * PIXEL_TO_WHEEL);
 				int wheelUnits = static_cast<int>(pixels * PIXEL_TO_WHEEL);
 				m_accumWheel += wheelUnits;
 				m_accumWheel += wheelUnits;
 
 
-				// 使用保存的最后触摸点(target 的客户区坐标)
+				// 浣跨敤淇濆瓨鐨勬渶鍚庤Е鎽哥偣锛坱arget 鐨勫�鎴峰尯鍧愭爣锛�
 				POINT pt = m_lastTouchPt;
 				POINT pt = m_lastTouchPt;
 				LPARAM lParamPos = MAKELPARAM(pt.x, pt.y);
 				LPARAM lParamPos = MAKELPARAM(pt.x, pt.y);
 
 
@@ -211,11 +211,11 @@ LRESULT TouchWindowBase::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 					::PostMessage(target, WM_MOUSEWHEEL, wParamWheel, lParamPos);
 					::PostMessage(target, WM_MOUSEWHEEL, wParamWheel, lParamPos);
 				}
 				}
 
 
-				// 衰减速度(指数衰减)
+				// 琛板噺閫熷害锛堟寚鏁拌“鍑忥級
 				// velocity *= pow(INERTIA_DECAY_PER_MS, dt)
 				// velocity *= pow(INERTIA_DECAY_PER_MS, dt)
 				m_inertiaVelocityPxPerMs *= std::pow(INERTIA_DECAY_PER_MS, static_cast<float>(dt));
 				m_inertiaVelocityPxPerMs *= std::pow(INERTIA_DECAY_PER_MS, static_cast<float>(dt));
 
 
-				// 停止条件
+				// 鍋滄�鏉′欢
 				if (std::abs(m_inertiaVelocityPxPerMs) < MIN_INERTIA_VELOCITY)
 				if (std::abs(m_inertiaVelocityPxPerMs) < MIN_INERTIA_VELOCITY)
 				{
 				{
 					StopInertia();
 					StopInertia();
@@ -231,6 +231,6 @@ LRESULT TouchWindowBase::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 			break;
 			break;
 	}
 	}
 
 
-	// 若未处理,交给基类
+	// 鑻ユ湭澶勭悊锛屼氦缁欏熀绫�
 	return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
 	return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
 }
 }