主监视器左侧的WM_NCHITTEST和辅助监视器

时间:2010-05-06 15:31:17

标签: c++ winapi monitor

所描述的第二个显示器设置在主设备左侧导致WM_NCHITTEST发送负值,根据this帖子显然不支持。

我有一个用win32编写的自定义控件,就像一个Group控件。它有一个小的可点击区域。当包含自定义控件的窗口位于主监视器左侧的第二个监视器上时,没有任何MOUSE事件可供我控制。 SPY ++显示WM_NCHITTEST消息但没有显示鼠标消息。当窗口移动到主监视器或辅助监视器位于主监视器的右侧(所有点均为正)时,一切正常。下面是我的自定义控件中WM_NCHITTEST的处理方式。一般来说,我需要它来返回HTTRANSPARENT,以免模糊放在其中的其他控件。任何人都有什么建议我需要做什么时髦的坐标转换以及响应WM_NCHITTEST返回什么来获取鼠标消息并将其发送到我的控件,如果它位于主监视器左侧的第二个监视器上? / p>

case WM_NCHITTEST:
    {
        POINT Pt = {LOWORD(lP), HIWORD(lP)};
        int i;
        ScreenToClient (hWnd, &Pt);
        if (PtInRect (&rClickableArea, Pt))
        {
            return(DefWindowProc( hWnd, Msg, wP, lP ));
        }
    }
    lReturn = HTTRANSPARENT;
    break;

1 个答案:

答案 0 :(得分:1)

您必须使用GET_X_LPARAM和GET_Y_LPARAM宏来提取鼠标坐标。与LOWORD等人不同,他们将正确地返回负值。返回无符号值。

POINT Pt = { GET_X_LPARAM(lP), GET_Y_LPARAM(lP) };

其余的代码应该没问题。