Grigoriy |
Отправлено: 08.07.2006, 05:48 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Есть одна особенность механизма возникновения событий от мыши.
Эта особенность в том, что если во время нажатия левой кнопки мыши курсор был над заданным компонентом и затем курсор мыши перемещается при нажатой левой кнопке, то ДАЖЕ ТОГДА, КОГДА КУРСОР УЙДЕТ ЗА ГРАНИЦЫ КОМПОНЕНТА — СОБЫТИЯ О ПЕРЕМЕЩЕНИИ МЫШИ ВСЕ РАВНО БУДУТ ПОСТУПАТЬ.
А вот если будет нажиматься вместо левой правая кнопка, то такого свойства механизм не дает !
А жаль.
Я эту мысль веду к тому, что, например, в Windows Commander файлы могут выделяться правой кнопкой мыши и даже когда курсор мыши уходит за пределы окна этой программы, то выделение файлов может продолжаться, если список не полностью занимает панель и часть его находится внизу.
Как обойти этот тупик ?
|
|
olegenty |
Отправлено: 08.07.2006, 06:25 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
SetCapture, GetCapture, ReleaseCapture, WM_CAPTURECHANGED
|
|
Grigoriy |
Отправлено: 09.07.2006, 06:40 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Спасибо, olegenty.
Вот только очередная особенность работы мыши или драйвера мыши.
В общем последовательность действий такова была:
1) нажимаем правую кнопку мыши
2) вызываем SetCapture(Form1->Panel14->Handle);
3) переводим курсор мыши за пределы Form1->Panel14
4) нажимаем левую кнопку мыши
5) отпускаем левую кнопку мыши
6) отпускаем правую кнопку мыши — событие не передается !
Последнее событие не передается.
Ещё особенность.
Если вызвать SetCapture и не удерживать никакуб кнопку мыши нажатой, то событие перемещения мыши поступает только тогда, когда курсор находится в пределах формы, имеющей фокус ввода. А если удерживать кнопку нажатой и вызвать SetCapture, то сообщение перемещения поступает при любой координате курсора мыши на экране. Если нажать левую кнопку — сбрасывается...
Отредактировано Grigoriy — 09/07/2006, 06:41
|
|
|