|
|
@@ -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:
|