Текущий архив: 2006.06.25;
Скачать: CL | DM;
ВнизСобытия мыши в ListView Найти похожие ветки
← →
Ritter (2005-10-14 23:28) [0]Приветствую участников форума.
При использовании ListView столкнулся с такой проблемой: при нажатии на левую или правую кнопку мыши процедура, назначенная на событие OnMouseDown вызывается нормально, но OnMouseUp происходит, только если было движение мыши за время, пока была нажата кнопка и курсор переместился на 4 или более пикселей.
Кто-нибудь знает, как это вылечить?
Пробовал перемещать курсор функцией SetCursorPos – не помогает, если курсор возвращать в первоначальную точку. Интересно, что в случае со средней кнопкой проблема не проявляется.
И еще один вопрос: можно ли в LV увеличить частоту возникновения события OnMouseMove (или привязать ее к определенной дистанции перемещения)? Необходимо применять определенные действия к элементам LV, находящимся под курсором, а при имеющейся частоте, если двигать мышь быстро, некоторые элементы пропускаются.
← →
Vladimir Kladov (2005-10-15 16:25) [1]что-то такое недавно было. Но частота тут не при чем. Что-то мне кажется сам listview так нехорошо себя ведет. А насчет пропуска событий - это вообще неверно, так делать не надо. система имеет право посылать столько WM_MOUSEMOVE, сколько успевает - это ее прерогатива. Правильно будет - выделить элементы, что-то еще нажать, чтобы с ними что-то сделалось.
← →
Ritter (2005-10-15 18:45) [2]Что-то мне кажется сам listview так нехорошо себя ведет.
Похоже, так и есть. Вот что нашел в документации по ListView:
Default List View Message Processing
WM_LBUTTONDOWN
Processed in different ways depending on whether a click or drag operation is being initiated. To determine which operation is involved, the list view control enters a modal message loop until either the button is released or the mouse is moved…
WM_RBUTTONDOWN
Processed the same way as the WM_LBUTTONDOWN message, except that the control sends an NM_RCLICK notification message (instead of NM_CLICK) and an LVN_BEGINRDRAG notification message (instead of LVN_BEGINDRAG). Note that the control processes the corresponding WM_RBUTTONUP message, and does not dispatch it. Applications thus cannot see this message, even by subclassing the control…
Про WM_MBUTTONDOWN ничего не сказано – соответственно выполняется стандартная обработка. Про «мертвую зону» в 4 пиксела тоже ничего не сказано.
Может есть другой способ отловить момент, когда кнопка мыши была отпущена?
…система имеет право посылать столько WM_MOUSEMOVE, сколько успевает - это ее прерогатива. Правильно будет - выделить элементы, что-то еще нажать, чтобы с ними что-то сделалось…
В том то и дело, что мне нужно выделить элементы в OwnerDraw LV дополнительно к основному выделению курсором (Пример: выделение файлов правой кнопкой в большинстве файл-менеджеров). Сделал так: запоминаем последний выделенный элемент, при вызове OnMouseMove, если кнопка не отпущена – выделяем все элементы, начиная со следующего после того, который записан и заканчивая текущим. Естественно, пока это работает нормально только со средней кнопкой.
Страницы: 1 вся ветка
Текущий архив: 2006.06.25;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.011 c