张洋 4 weeks ago
parent
commit
28932f2a3a

+ 11 - 12
zhipuzi_pos_windows/ui/CTouchWindowBase.cpp

@@ -76,22 +76,21 @@ void CTouchWindowBase::StopInertia()
 
 LRESULT CTouchWindowBase::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
-	// [触屏注册·懒注册] 不能放在 WM_CREATE 分支里:各窗口 HandleMessage 在 WM_CREATE 处理完若 bHandled
-	// 仍为 TRUE 会直接 return,基类 WM_CREATE 永远走不到(主窗口是在自己的 OnCreate 里注册的,弹框此前从未注册)。
-	// 故改为“懒注册”:第一次进入基类 HandleMessage(任何未处理的消息,通常是创建后随即的 WM_SIZE /
-	// WM_SHOWWINDOW 等)即注册一次。这样主窗口与所有 CModalWnd 派生弹框都能统一获得 WM_TOUCH 能力,
-	// 再配合 CPaintManagerUI::MessageHandler 入口的 FROMTOUCH 过滤器,彻底消除“弹框里滑动误触 / 悬浮卡死”。
-	// 主窗口虽已在 OnCreate 注册过,重复注册无害;弹框此前缺失,这里统一补上。
-	if (!m_bTouchRegistered)
-	{
-		m_bTouchRegistered = true;
-		::RegisterTouchWindow(m_hWnd, 0);
-	}
+	// [触屏注册·作用域] 只有“主窗口”注册 WM_TOUCH——在 CMainWnd::OnCreate 里
+	// ::RegisterTouchWindow(m_hWnd, 0) 完成。本基类【不再】为派生弹框统一注册,原因:
+	//   弹框一旦注册,就会改走下面的 WM_TOUCH 自合成点击逻辑;而自合成点击(PostMessage
+	//   模拟 down+up)在模态弹框里实测会丢失——触屏点按钮/输入框毫无反应,鼠标点击却正常。
+	//   该问题只在弹框出现,主窗口自合成一切正常,根因属于“弹框消息路由/捕获/坐标”的运行时
+	//   细节,需真机调试才能定位,详见 2026-09-17 工作记录。
+	//   未注册的弹框走 Windows 默认“触摸→鼠标”模拟,产生的是【不带 FROMTOUCH 标记】的鼠标消息;
+	//   而 CPaintManagerUI::MessageHandler 入口的过滤器只吞掉带 FROMTOUCH 的模拟消息,因此这些消息
+	//   能正常进入 DuiLib,由标准鼠标流程完成点击与(滚轮式)滚动。
+	//   ⇒ 弹框保持“不注册”即恢复触屏点击;主窗口的惯性滚动 / 防误触逻辑完全不受影响。
 
 	switch (uMsg)
 	{
 		case WM_CREATE:
-			// 历史遗留:注册逻辑已上移到函数入口(见上方懒注册),此处不再处理。
+			// 历史遗留:注册逻辑已上移到主窗口 OnCreate,弹框不复用,此处留空。
 			break;
 
 		case WM_TOUCH:

+ 0 - 1
zhipuzi_pos_windows/ui/CTouchWindowBase.h

@@ -25,7 +25,6 @@ protected:
 	HWND m_hWndPaint = NULL;
 
 	// touch 状态
-	bool m_bTouchRegistered = false;    // 懒注册标记:RegisterTouchWindow 只需调一次
 	bool m_touchDown = false;
 	LONG m_lastX = 0;
 	LONG m_lastY = 0;