Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Перетаскивание кнопок |
Автор: Coocky 2.4.2004, 21:01 |
Нужно перетащить кнопку.Если альтернатива отслеживанию MOUSE_MOVE?Может какой-то drop существует![]() |
Автор: Stalk 2.4.2004, 21:56 |
Я обычно ставлю очень маленький таймер(11-23 миллисек) и получаю позицию крысы. Интересная штука: вожу мышей по окну-все ок(есть маусмув), вожу мышей по кнопке в окне-нету маусмува! Кто-нить объяснит мне почему? |
Автор: mr.DUDA 2.4.2004, 22:45 | ||
OnDragEnter и OnDragLeave, если мне память не изменяет... Но рисовать перетаскиваемый объект рядом с курсором мыши всё равно придётся вручную! |
Автор: Coocky 4.4.2004, 22:54 |
Ладно,пошел я в обход.При нажатии ставлю флаг на разрешении перетаскивания кнопки.MOUSE_MOVE тащу.При отпускании флаг ставлю на FALSE.Но не перетаскивается ![]() Кто-то подсказал,что это надо обрабатывать в PreTransletMessage .Не знаю,не пробовал... |
Автор: Anklav 4.4.2004, 23:35 |
Если я не ошибаюсь, то можно в обработчике события WM_NCHITTEST параметру Message.Result присвоить значение HTCAPTION (это если используешь VCL, хотя для MFC почти то же самое) |
Автор: mr.DUDA 5.4.2004, 11:28 |
Coocky, код - в студию ! А при отпускании что происходит ? Надо бы MoveWindow вызвать с новыми координатами... Anklav, в VCL не разбираюсь, но в MFC не видел никакого HTCAPTION |
Автор: Coocky 5.4.2004, 11:45 | ||||||
А при отпускании ставится флаг FALSE на MoveWindow.Что б при перемещении мыши,при НЕ нажатой кнопке,перемещение последней не происходило(фух сказал... ![]() Скорей всего проблема ,что нажатие кнопки не отрабатывает сообщение о нажатии кнопки ![]() Так же,как и PtInRect не работает на Button_e ![]()
Ну как ты мог такое подумать обо мне ![]()
Ага вот только права члена клуба получу ![]() ![]() |
Автор: Coocky 5.4.2004, 12:23 | ||||
Stalk
Вот и у него проблема.... Coocky
![]() |
Автор: Anklav 5.4.2004, 16:59 | ||
Если сделать так:
то такое окно можно будет таскать за любую часть. Аналогично и для и для CButton (нужно только вместо CWnd подставит CButton) |
Автор: Nastya 5.4.2004, 17:42 |
1. Кнопка то же окно. на firststeps.ru была статья таскаем форму за любое место, сдесь прокатит то же 2. Написать свой класс, порожденн от CButton и в нем обрабатывать сообщение, MouseMove, там в одном из парметров можно посмотреть нажата ли при этом левая кнопка мыши, если да таскайте на здоровье 3. Если вся проблема в том, что в окно родителя не приходит сообщение от мыши при заходе на кнопку, можно использовать GetCapture? ReleaseCapture Надеюсь я правильно поняла о чем речь ![]() |
Автор: mr.DUDA 5.4.2004, 18:17 | ||
Coocky, я и забыл предупредить, что Win-сообщения от контролов (маусмув и др.) обрабатывают сами контролы, по причине чего их нужно subclass-ировать (создав производный класс, например от CButton) и обрабатывать сообщения в рамках контрола а не диалога.
Сорри ![]() ![]() ![]() |
Автор: Coocky 7.4.2004, 15:08 | ||||
Да,пардон за вопрос,ну что нужно указать(добавить) в производном классе?Функцию по перетаскиванию?Если можно,приведите пример,можно и схематически ![]() ![]()
Первый раз слышу проHTCAPTION;Это видно что-то из WINAPI ![]() |
Автор: Anklav 7.4.2004, 17:58 | ||
HTCAPTION - это WinAPI константа кроме неё есть ещё HTBORDER, HTBOTTOM, HTCLIENT, HTCLOSE и др. Метод OnNcHitTest() вызывается всякий раз, когда курсор мыши находится над окном. И вызывается он раньше OnMouseMove(), OnMouseDown() и др. В качестве возвращаемого значения нужно указать в какой области окна произошло событие. Поэтому, если вернуть значение HTCAPTION, то любые действия в любой области окна будут восприниматься как действия над заголовком (Caption) окна. |
Автор: Coocky 12.4.2004, 20:00 |
Да ,но не хочу я с WINAPI работать ![]() ![]() ![]() ![]() |
Автор: Nastya 13.4.2004, 15:49 |
В классе от CButton обрабатываешь сообщения мыши, какие взависимости от реализации LButtonDown, MouseMove. Вечерком, если не забуду, кину прмерчик |
Автор: Coocky 15.4.2004, 21:48 | ||
Ну что же вы,девушка ![]() ![]() ![]() |