Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перетаскивание рисунка, мышью 
:(
    Опции темы
Svia
Дата 30.5.2009, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть HDC, на нем что-то нарисовано.
Есть совместимый с ним DC. На нем, допустим, нарисован прямоугольник.
Хочется заместить курсор мыши на то, что лежит во втором DC. Из файла читать нельзя - изображение курсора может обновляться.
Разумеется, отрисовка должна вестись верно, с сохранением фона, и затиранием следов курсора.

PM MAIL   Вверх
Earnest
Дата 30.5.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Посмотри в сторону функций ImageList: DragEnter, DragLeave, DragMove


--------------------
...
PM   Вверх
Svia
Дата 30.5.2009, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Что такое  ImageList? MFC не использую, чистый winapi, и вообще такого класса кроме как в дотнете нет.
PM MAIL   Вверх
Andrey44
Дата 1.6.2009, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Цитата(Svia @  30.5.2009,  23:01 Найти цитируемый пост)
Что такое  ImageList?

Если быть точным то CImageList.

Цитата(Svia @  30.5.2009,  23:01 Найти цитируемый пост)
MFC не использую, чистый winapi

Зачем тогда задаешь вопрос в ветке MFC ?

Используй тогда IImageList и его методы, там много интересного.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Svia
Дата 1.6.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Andrey44 @ 1.6.2009,  07:16)
Цитата(Svia @  30.5.2009,  23:01 Найти цитируемый пост)
Что такое  ImageList?

Если быть точным то CImageList.

Цитата(Svia @  30.5.2009,  23:01 Найти цитируемый пост)
MFC не использую, чистый winapi

Зачем тогда задаешь вопрос в ветке MFC ?

Используй тогда IImageList и его методы, там много интересного.

Может я не туда смотрю, но у меня на экране название подфорума "Форум -> Программирование -> C++ -> C/C++: Системное программирование и WinAPI (еще)". Где там слово "MFC"?

Про IImageList нашел. На крайний случай, конечно, попробую использовать его. Думаю, что есть что-то простое, не столь навороченное как список картинок. К тому же, судя по отзывам в инете очень он неважно работает с перетаскивание картинок "нестандартного размера".
PM MAIL   Вверх
Andrey44
Дата 1.6.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Цитата(Svia @  1.6.2009,  12:31 Найти цитируемый пост)
Может я не туда смотрю, но у меня на экране название подфорума "Форум -> Программирование -> C++ -> C/C++: Системное программирование и WinAPI (еще)". Где там слово "MFC"?

Извиняюсь, наверное не проснулся утром smile 
Цитата(Svia @  1.6.2009,  12:31 Найти цитируемый пост)
К тому же, судя по отзывам в инете очень он неважно работает с перетаскивание картинок "нестандартного размера". 

Можно ссылку где такое прочитали?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 2.6.2009, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Svia @  1.6.2009,  13:31 Найти цитируемый пост)
Может я не туда смотрю, но у меня на экране название подфорума "Форум -> Программирование -> C++ -> C/C++: Системное программирование и WinAPI (еще)".

Это я вчера перенесла, так что не очень-то, правильно тебе замечание сделали. smile 
Если под "нестандартным размером" имеется в виду просто большие картинки, а "неважно" - это "медленно", то да, GDI+ вообще не чемпион по скорости.

Насчет ImageList: есть, конечно и MFC-оболочка, но вообще-то это набор функций АПИ: ImageList_EndDrag etc. Ничего навороченного в списке картинок нет. Если будешь рисовать сам - примерно тоже самое придется написать руками. Другое дело, если у тебя действительно большая картинка. Но тогда нужно определиться, как именно ты ее хочешь таскать...



--------------------
...
PM   Вверх
Svia
Дата 2.6.2009, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я собрал приложение для этого проверки. Да, попробую использовать методы указанного интерфейса.
Таскаться могу рисунки вплоть до 400х400 точек.

На деле мне вообще надо таскать что-то нарисованное на канве cairo и под виндой (чего ради и искал) и под маком (ладно жоть не мне портировать). Но, к сожалению, любителей кайры тут не столь много =).
Потому и искал максимально кроссплатформенное решение. Ну что-то вроде "тебе надо сделат две маски и заюзать CreateCursor". Т.е. некую функцию, которую проще будет спортировать чем весь commctl32.dll.

To Andrey44: Как второй вариант (еще не пробовал)  использую упомянутый CreateCursor (ну ооочень лень маски на ходу делать =)), но (тут я напутал) именно он хреново работает с курсорами нестандартных размеров (первая ссылка по createcursor c++ big size)

Так что для винды, думаю, решение можно считать найденным. По-крайней мере это кажется меньшим из зол

Добавлено @ 10:51
[QUOTE=Earnest,2.6.2009,  07:39]
Цитата(Svia @  1.6.2009,  13:31 Найти цитируемый пост)

Насчет ImageList: есть, конечно и MFC-оболочка, но вообще-то это набор функций АПИ: ImageList_EndDrag etc. Ничего навороченного в списке картинок нет. Если будешь рисовать сам - примерно тоже самое придется написать руками. Другое дело, если у тебя действительно большая картинка. Но тогда нужно определиться, как именно ты ее хочешь таскать...

Тут проблема в динамике перемещения. Картинка будет замещать курсор, т.е должна двигаться достаточно быстро - почти так же быстро как простая стрелка.

Это сообщение отредактировал(а) GremlinProg - 2.6.2009, 10:54
PM MAIL   Вверх
Earnest
Дата 2.6.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Создавать курсор 400*400 - это, конечно, слишком... А вот насчет DragImage - не думаю, что сильно тормозить будет. А если будет, то рисуй сам: совместимый контекст в памяти, скопировать туда картинку,
при перемещении мышки восстановить изображение на стором месте и нарисовать на новом (запомнив, что было). Все через BitBlt. 


--------------------
...
PM   Вверх
Svia
Дата 2.6.2009, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Суть-то понятна. Хочется, чего-то легкого, что бы клиппингом областей не заморачиваться, вроде как дернул за OnDraw разик, он вообще всё перерисовал.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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