Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перетаскивание кнопок, Есть ли альтернатива? 
:(
    Опции темы
Coocky
Дата 2.4.2004, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Нужно перетащить кнопку.Если альтернатива отслеживанию MOUSE_MOVE?Может какой-то drop существуетbiggrin.gif


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Stalk
Дата 2.4.2004, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.1.2004
Где: Украина, харьков

Репутация: нет
Всего: нет



Я обычно ставлю очень маленький таймер(11-23 миллисек) и получаю позицию крысы. Интересная штука: вожу мышей по окну-все ок(есть маусмув), вожу мышей по кнопке в окне-нету маусмува! Кто-нить объяснит мне почему?
PM MAIL ICQ   Вверх
mr.DUDA
Дата 2.4.2004, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Цитата
Нужно перетащить кнопку.Если альтернатива отслеживанию MOUSE_MOVE?Может какой-то drop существует

OnDragEnter и OnDragLeave, если мне память не изменяет... Но рисовать перетаскиваемый объект рядом с курсором мыши всё равно придётся вручную!



--------------------
user posted image
PM MAIL WWW   Вверх
Coocky
Дата 4.4.2004, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Ладно,пошел я в обход.При нажатии ставлю флаг на разрешении перетаскивания кнопки.MOUSE_MOVE тащу.При отпускании флаг ставлю на FALSE.Но не перетаскивается smile.gif
Кто-то подсказал,что это надо обрабатывать в PreTransletMessage .Не знаю,не пробовал...


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Anklav
Дата 4.4.2004, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.12.2003
Где: Менск

Репутация: нет
Всего: 1



Если я не ошибаюсь, то можно в обработчике события WM_NCHITTEST параметру Message.Result присвоить значение HTCAPTION

(это если используешь VCL, хотя для MFC почти то же самое)

Это сообщение отредактировал(а) Anklav - 4.4.2004, 23:39
PM ICQ   Вверх
mr.DUDA
Дата 5.4.2004, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Coocky, код - в студию ! А при отпускании что происходит ? Надо бы MoveWindow вызвать с новыми координатами...

Anklav, в VCL не разбираюсь, но в MFC не видел никакого HTCAPTION



--------------------
user posted image
PM MAIL WWW   Вверх
Coocky
Дата 5.4.2004, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Цитата
А при отпускании что происходит ?

А при отпускании ставится флаг FALSE на MoveWindow.Что б при перемещении мыши,при НЕ нажатой кнопке,перемещение последней не происходило(фух сказал... biggrin.gif )
Скорей всего проблема ,что нажатие кнопки не отрабатывает сообщение о нажатии кнопки biggrin.gif
Так же,как и PtInRect не работает на Button_e sad.gif
Цитата
Надо бы MoveWindow вызвать с новыми координатами...

Ну как ты мог такое подумать обо мне biggrin.gif
Цитата
Coocky, код - в студию !

Ага вот только права члена клуба получу wink.gif (наверно,в следущей из жизни, когда я стану кошкой... biggrin.gif )


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Coocky
Дата 5.4.2004, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Stalk
Цитата
Интересная штука: вожу мышей по окну-все ок(есть маусмув), вожу мышей по кнопке в окне-нету маусмува! Кто-нить объяснит мне почему?

Вот и у него проблема....
Coocky
Цитата
Скорей всего проблема ,что нажатие кнопки не отрабатывает сообщение о нажатии кнопки 
Так же,как и PtInRect не работает на Button_e 

Наверное я прав sad.gif

Это сообщение отредактировал(а) Coocky - 5.4.2004, 12:28


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Anklav
Дата 5.4.2004, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.12.2003
Где: Менск

Репутация: нет
Всего: 1



Если сделать так:
Код

class CMyWnd: public CWnd
{
        // ...
        afx_msg UINT OnNcHitTest(CPoint Point);
        DECLARE_MESSAGE_MAP();
};

//...
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
        ON_WM_NCHITTEST()
END_MESSAGE_MAP()
//...
UINT CMyWnd::OnNcHitTest(CPoint Point)
{
        return HTCAPTION;
}
//...

то такое окно можно будет таскать за любую часть.
Аналогично и для и для CButton (нужно только вместо CWnd подставит CButton)

Это сообщение отредактировал(а) Anklav - 5.4.2004, 17:00
PM ICQ   Вверх
Nastya
Дата 5.4.2004, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 5
Всего: 44



1. Кнопка то же окно. на firststeps.ru была статья таскаем форму за любое место, сдесь прокатит то же
2. Написать свой класс, порожденн от CButton и в нем обрабатывать сообщение, MouseMove, там в одном из парметров можно посмотреть нажата ли при этом левая кнопка мыши, если да таскайте на здоровье
3. Если вся проблема в том, что в окно родителя не приходит сообщение от мыши при заходе на кнопку, можно использовать GetCapture? ReleaseCapture

Надеюсь я правильно поняла о чем речь smile.gif


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
mr.DUDA
Дата 5.4.2004, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Coocky, я и забыл предупредить, что Win-сообщения от контролов (маусмув и др.) обрабатывают сами контролы, по причине чего их нужно subclass-ировать (создав производный класс, например от CButton) и обрабатывать сообщения в рамках контрола а не диалога.

Цитата
Ну как ты мог такое подумать обо мне

Сорри biggrin.gif biggrin.gif biggrin.gif ...


--------------------
user posted image
PM MAIL WWW   Вверх
Coocky
Дата 7.4.2004, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Цитата
(создав производный класс, например от CButton) и обрабатывать сообщения в рамках контрола а не диалога.

Да,пардон за вопрос,ну что нужно указать(добавить) в производном классе?Функцию по перетаскиванию?Если можно,приведите пример,можно и схематически smile.gif (Никогда еще не создавал классов,производных от классов МФС,ну кроме CMyDialog:public CDialog biggrin.gif )
Код
class CMyWnd: public CWnd
{
       // ...
       afx_msg UINT OnNcHitTest(CPoint Point);
       DECLARE_MESSAGE_MAP();
};

//...
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
       ON_WM_NCHITTEST()
END_MESSAGE_MAP()
//...
UINT CMyWnd::OnNcHitTest(CPoint Point)
{
       return HTCAPTION;
}

Первый раз слышу проHTCAPTION;Это видно что-то из WINAPI wink.gif

Это сообщение отредактировал(а) Coocky - 7.4.2004, 15:10


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Anklav
Дата 7.4.2004, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 9.12.2003
Где: Менск

Репутация: нет
Всего: 1



Цитата

Первый раз слышу проHTCAPTION;Это видно что-то из WINAPI

HTCAPTION - это WinAPI константа
кроме неё есть ещё HTBORDER, HTBOTTOM, HTCLIENT, HTCLOSE и др.
Метод OnNcHitTest() вызывается всякий раз, когда курсор мыши находится над окном. И вызывается он раньше OnMouseMove(), OnMouseDown() и др.
В качестве возвращаемого значения нужно указать в какой области окна произошло событие. Поэтому, если вернуть значение HTCAPTION, то любые действия в любой области окна будут восприниматься как действия над заголовком (Caption) окна.
PM ICQ   Вверх
Coocky
Дата 12.4.2004, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Да ,но не хочу я с WINAPI работать mad.gif Лучше сделаю через производный класс smile.gif Только подскажите как,я же просил sad.gif smile.gif


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Nastya
Дата 13.4.2004, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 5
Всего: 44



В классе от CButton обрабатываешь сообщения мыши, какие взависимости от реализации
LButtonDown, MouseMove.

Вечерком, если не забуду, кину прмерчик


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0906 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.