|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.03.2016, 16:27 | #1 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
таскать static по окну мышкой
Здравствуйте.
Нужно перетаскивать контрол static по окну мышкой. Код:
Это работает, если события принимает парент статика. Если переопределить оконную процедуру статика и принимать события в ней, то WM_MOUSEMOVE начинает приходить не только при движении мыши, а постоянно. При этом, значения x2,y2 постоянно меняются и статик перемещается не туда. Как это исправить? p.s. Решено. Можете удалить Последний раз редактировалось BLACK_RAIN; 11.03.2016 в 11:11. |
10.03.2016, 21:31 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
А чему равны nx и ny?
Далее, зачем так сложно, прочитайте про WM_NCHITTEST и результат HTCAPTION. Правда для контролов не пробовал но окна таскаются на ура. |
11.03.2016, 07:50 | #3 | |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Цитата:
nx,ny изначально равны 0,0 и таскаемый статик находится в координате 0,0. И еще есть такой глюк: если зажать ЛКМ на статике и шевельнуть мышь, то WM_MOUSEMOVE начинает приходить постоянно, пока ЛКМ нажата. Так ведь не должно быть??? почему это происходит? Добавлено Сейчас проверил такую штуку: если браться не за сам статик, а за главное окно, то статик таскается нормально. То есть, если события WM_LBUTTONDOWN,WM_LBUTTONUP,WM_MOUS EMOVE будет принимать не сам таскаемый статик, а главное окно программы или другой child. А если их принимает сам статик, то получается вот что: [SPOILER] [/SPOILER] То есть, происходит примерно следующее: зажимаем ЛКМ и немного сдвигаем мышь (и больше ее не двигаем, но продолжаем держать ЛКМ). WM_MOUSEMOVE начинает приходить постоянно, в цикле. Как видим на скриншоте, WM_MOUSEMOVE пришел 4527 раз. Это за 4 секунды и мышку я почти не двигал. А так же видим, что переменные x2,y2 постоянно принимают разные значения. Если убрать MoveWindow, то всё вроде бы как нормально с цифрами становится. Но статик-то не перемещается. Последний раз редактировалось BLACK_RAIN; 11.03.2016 в 10:53. |
|
11.03.2016, 11:15 | #4 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Решено! Просто не нужно добавлять стиль SS_NOTIFY, если делаешь сабклассинг. Теперь учту.
Ну вот как всегда. Одна проблема решилась, вторая появилась. Нужно перетаскивать статик, который находится в классе. Вот класс: Код:
Очень не хочется юзать WM_NCHITTEST. Последний раз редактировалось BLACK_RAIN; 11.03.2016 в 12:45. |
12.03.2016, 09:46 | #5 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Задача простая. Помогите же.
Имеем класс, в классе статик. Делаем сабклассинг статика - ему не приходят события мыши. Если брать такой же статик вне класса, то ему приходят. Если ставить стиль SS_NOTIFY, тогда получается рекурсия в событии WM_MOUSEMOVE. Как это решить без использования WM_NCHITTEST? не пойму, что делать с WM_NCHITTEST. Пишут, что нужно отправить Result := SendMessage(wnd,WM_NCHITTEST,HTCAPT ION,Lpar); по клику мыши. Но у меня событие WM_LBUTTONDOWN не приходит. А если с SS_NOTIFY, то рекурсия получается. Объясните хотя-бы, почему и откуда берётся рекурсия? Последний раз редактировалось BLACK_RAIN; 12.03.2016 в 16:09. |
13.03.2016, 14:57 | #6 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
если события от мыши не приходят, то способ с WM_NCHITTEST использовать не получится, верно? не молчите
|
13.03.2016, 16:31 | #7 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Теперь код из первого поста опять перестал работать. Даже если статик находится вне класса. WM_MOUSEMOVE приходит рекурсивно. В посте №4 я написал, что проблема решена. Нужно убрать стиль SS_NOTIFY. Но теперь это перестало работать!
Код:
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
static и non-static context | kos1nus | Общие вопросы по Java, Java SE, Kotlin | 1 | 17.07.2013 00:10 |
Не таскать с собой libmySQL.dll | Synapse | C/C++ Базы данных | 2 | 16.07.2012 04:23 |
Рисование STATIC мышкой | Sylvos | Win Api | 1 | 23.02.2012 06:27 |
static | Gen_r_questions | PHP | 7 | 05.04.2011 15:12 |
Таскать фигуру мышкой | Poseydon | Общие вопросы Delphi | 4 | 07.08.2008 12:36 |