我有一个使用Direct3D 9绘制到客户区域的程序,大约60 it,而鼠标正在干扰,所以当它在客户区域移动时,我想摆脱它-- only。
我认为,在系统调用ShowCursor(false)时,在WM_MOUSEMOVE中调用WM_NCMOUSEMOVE和调用WM_NCMOUSEMOVE时调用ShowCursor(true)是可行的,但这会导致不良行为。
因此,我发现TrackMouseEvent()可以胜任这项工作,但我是这样称呼它的:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static bool g_fMouseTracking = false;
switch (message)
{
case WM_MOUSEMOVE:
if (!g_fMouseTracking)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.dwFlags = TME_NONCLIENT;
tme.dwHoverTime = HOVER_DEFAULT;
tme.hwndTrack = hWnd;
g_fMouseTracking = TrackMouseEvent(&tme);
}
break;
case WM_NCMOUSEHOVER:
ShowCursor(true);
break;
... WM_NCMOUSEHOVER从来没有被调用过。我也不知道原因。
无论如何,这只是一段代码,为了做我想做的事情,我需要更多的代码,但是如果它不调用WM_NCMOUSEMOVE,我就不能开始做更高级的鼠标悬停技巧。
发布于 2021-08-09 05:49:47
当您想要跟踪WM_NCMOUSEHOVER时,必须在WM_NCMOUSEMOVE中使用TrackMouseEvent。
https://stackoverflow.com/questions/68707122
复制相似问题