Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.017 c
2-1149773038
AlexanderMS
2006-06-08 17:23
2006.06.25
Русификация сообщений об ошибках


15-1149207948
dancer
2006-06-02 04:25
2006.06.25
У кого какие модемы?


11-1120722665
Dodfr
2005-07-07 11:51
2006.06.25
TBitmap.PasteFromClipBoard bug ?


2-1149444053
vegarulez
2006-06-04 22:00
2006.06.25
Как создать фай *.txt и записать в него данные.


2-1149263829
ZV
2006-06-02 19:57
2006.06.25
Start





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский