Курсор изменяется по диагонали, когда форма находится сверху и слева от основного монитора. - PullRequest
5 голосов
/ 01 октября 2009

У нас есть приложение, которое работает на рабочих станциях с несколькими мониторами в XP64 и Vista64, и возникает странная проблема, когда одна форма в приложении перемещается на определенные мониторы.

Если форма перемещается на монитор, который находится слева и над основным монитором (у него отрицательные координаты в диалоговом окне «Параметры отображения»), пользователи получат курсор с диагональным изменением размера при установке курсора в форме (I Я видел это только в том случае, если курсор находится в хроме окна, но пользователи сообщали, что это происходит внутри всего окна).

Мне удалось определить, что это происходит только тогда, когда курсор находится над основным монитором (если дополнительный монитор только частично над основным монитором приводит к проблеме, возникающей только в той части формы, которая находится над основным монитором) .

Это происходит только с одной формой во всем нашем приложении, и она не делает ничего особенного (не переопределяет WndProc и т. Д.), А все используемые пользовательские элементы управления также используются в других формах, которые не отобразить эту проблему.

Что могло бы вызвать постоянное отображение диагонального курсора?

Ответы [ 2 ]

6 голосов
/ 01 октября 2009

Это похоже на ошибку в Form.WmNCHitTest. Я считаю, что способ определения координат x и y неверен (чтобы получить y, он делает HIWORD((int)((long)lParam)), где в документации сказано использовать GET_Y_LPARAM, который определен как ((int)(short)HIWORD(lParam))).

Этот метод используется только в том случае, если у вас включена ручка размера. Отключение ручки размера обходит этот код и заставляет форму работать правильно.

0 голосов
/ 25 апреля 2014

Дополнительная информация: Я обнаружил, что при установке параметра Form.SizeGripStyle на Показывать, что странное поведение с курсором становится диагональным курсором изменения размера, который выглядит и работает так же, как вы изменяете размер окна из правого нижнего угла, показывает вверх, когда окно формы перемещается на дополнительный монитор. Если для параметра Form.SizeGripStyle установлено значение «Авто», по умолчанию эта проблема исчезает, а курсоры окна формы и изменение размера работают как надо (надлежащие курсоры и т. Д.).

...