【问题标题】:Problem capturing mouse left button while using WM_NCHITTEST使用 WM_NCHITTEST 时捕获鼠标左键时出现问题
【发布时间】:2019-05-26 03:47:12
【问题描述】:
case WM_NCHITTEST:  { 
     LRESULT hit = DefWindowProc( hWnd, uMsg, wParam, lParam ); 

        if ( hit == HTCLIENT ) { 
            hit = HTCAPTION; 
            SendNotifyMessageA( hWnd, WM_MOUSEMOVE, NULL, MAKELPARAM( LOWORD(lParam), HIWORD(lParam) ) );
            pts.x = pts.y = 0;
            ClientToScreen( hWnd, &pts );
            SendNotifyMessageA( hWnd, WM_EXITSIZEMOVE, NULL,NULL );
            return hit;
        }   } break; 
case WM_NCLBUTTONDOWN: { LMB_Dyn[h2] = true;  } break;

当我尝试通过单击客户区(窗口中的任何位置)来移动窗口时,我正在使用此代码。这工作正常。 但是我在正确接收鼠标左键的状态时遇到问题,虽然这种代码有效,但问题是当我进行简单的单击而不是“单击并移动”时,LMB_Dyn 变量(鼠标左键)有一些延迟(不会立即收到我按下鼠标按钮的通知。

使用WM_NCHITTEST时如何正确获取鼠标左键的状态?

【问题讨论】:

  • 您为什么要发出WM_MOUSEMOVEWM_EXITSIZEMOVE 消息?你不需要这样做。至于你的问题,看看GetAsyncKeyState(VK_LBUTTON)
  • @Remy Lebeau 谢谢。这部分负责获取移动后窗口的位置并更新客户端坐标中的鼠标位置。我会检查 GetAsyncKeyState(VK_LBUTTON)。
  • GetAsyncKeyState(VK_LBUTTON) 似乎可以正确地在屏幕上的任何地方单击鼠标左键的状态,但是当我单击窗口的客户区时,变量的更新仍然很慢...
  • Stackoverflow 提示:虽然删除吸引反对票的问题可以保护您的声誉,但它对避免问题被禁止没有任何好处,只会让解禁变得更加困难。通常,一旦一个问题获得了几次反对票,它就会停止反对票。

标签: c winapi


【解决方案1】:

错误:} } break; 应该是 } return hit; }

但是,这里发生了一些更激进的事情。 WM_NCHITTEST 不打算这样使用,并且允许使用当前鼠标位置以外的坐标调用。这意味着您的SendNotifyMessageA 可以发送垃圾。

我看到你有一个WM_NCLBUTTONDOWN 的处理程序。也许这就是你所需要的。或者,如果你想让窗口可以拖动到它上面的任何地方,那应该是这样的:

case WM_NCHITTEST:  {
    LRESULT hit = DefWindowProc( hWnd, uMsg, wParam, lParam );
    if ( hit == HTCLIENT ) { 
        return HTCAPTION;
    }
    return hit;
}

WM_NCLBUTTONDOWNWM_NCLBUTTONUP 的文档说它们会立即开火。忘记您的InvalidateRect 呼叫真的很容易,因此不会为您重绘屏幕,因此看起来很慢。

【讨论】:

  • 谢谢。我正在使用 WM_NCHITTEST 测试,以便能够通过单击客户区域的任意位置来移动窗口,同时在客户端坐标中检索鼠标 x,y 并更新存储窗口位置和大小的变量。 (它是一个多窗口应用程序)。当我使用 WM_NCLBUTTONDOWN 时,我得到了鼠标左键,但是当我单击它时没有释放它...欢迎任何建议我应该实现窗口移动并使用其他功能调整大小?
  • 另外问题是如何在使用 WM_NCHITTEST 时正确检索鼠标按钮状态,我知道 WM_NCHITTEST 测试如何仅用于移动窗口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多