Как захватить щелчок мыши за пределами панели - PullRequest
0 голосов
/ 23 апреля 2011

Как можно зафиксировать щелчок мыши за пределами панели в приложении Windows Form?

Ответы [ 3 ]

3 голосов
/ 23 апреля 2011

Для захвата глобальных событий мыши и клавиатуры вам нужно захватывать сообщения Windows WM_MOUSE_LL и WM_KEYBOARD_LL, а не только WM_MOUSE и WM_KEYBOARD. Эти события могут быть записаны только в NT / 2000 / XP. В более поздних версиях ОС это невозможно (по вполне очевидным причинам безопасности, я полагаю).

Если вы используете NT / 2000 / XP, вот пример кода:

http://www.codeproject.com/KB/cs/globalhook.aspx

1 голос
/ 23 апреля 2011

Ответ на ваш вопрос, установите для свойства Capture панели значение true. Все события ввода мыши теперь направлены на панель, даже если мышь находится за пределами окна панели. Однако это временные условия (как и должно быть), нажатие кнопки приведет к отмене захвата после того, как щелчок доставлен на панель. Событие MouseCaptureChanged сообщает вам, когда это произошло. Безусловно, захват мыши - это не вариант, например, нажатие Ctrl + Esc всегда отменит его.

0 голосов
/ 23 апреля 2011

Вы можете обработать событие MouseClick самой формы.

class YourForm : Form
{
    protected override void OnMouseClick(MouseEventArgs e)
    {
        base.OnMouseClick(e);

        // Do something.
    }
}
...