WM_NCHITTEST и дополнительный монитор слева от основного монитора - PullRequest
1 голос
/ 06 мая 2010

Описанная установка со вторым монитором слева от первичной причины заставляет WM_NCHITTEST отправлять отрицательные значения, которые явно не поддерживаются согласно этой записи.

У меня есть пользовательский элемент управления, написанный на win32, который похож на групповой элемент управления. У него небольшая кликабельная область. События MOUSE не приходят к моему элементу управления, когда окно, содержащее пользовательский элемент управления, находится на втором мониторе слева от основного монитора. SPY ++ показывает сообщения WM_NCHITTEST, но не сообщения мыши. Когда окно перемещается на основной монитор или вспомогательный монитор располагается справа от основного (все точки положительные), тогда все работает нормально. Ниже описано, как обрабатывается WM_NCHITTEST в моем пользовательском элементе управления. В общем, мне нужно вернуть HTTRANSPARENT, чтобы не затемнять другие элементы управления, размещенные внутри него. У кого-нибудь есть какие-либо предложения о том, что мне нужно сделать прикольный перевод координат и что вернуть в ответ на WM_NCHITTEST, чтобы сообщения мыши были переведены и отправлены моему контролю в случае, если он находится на втором мониторе, расположенном слева от основного монитора?

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 Ответ

1 голос
/ 06 мая 2010

Вы должны использовать макросы GET_X_LPARAM и GET_Y_LPARAM для извлечения координат мыши.Они будут правильно возвращать отрицательные значения, в отличие от LOWORD et al.которые возвращают беззнаковые значения.

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

Остальной код должен быть в порядке.

...