![]() |
|
|
![]()
|
|
| kometa_triatlon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 1 Всего: 6 |
Хочу сделать, чтобы по окну плавно перемещалась картинка. Только плавно не получается, если я задаю цикл, она моментально оказывается в конечной точке. Давно интересовал вопрос, есть ли вообще в С++ или МФС функция, которая задерживает выполнение программы? Ну там sleep, delay....
Хотя может как-то по-другому эту задачу решить? К примеру с помощью таймера? -------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
Sleep()
Можно двигать по таймеру(WM_TIMER) -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
А ты галочку "Вопрос решен" поставил?
-------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Хочу еще добавить. что ОДНИМ Sleep() плавность анимации не обеспечить, но если интересно-можно обсудить
-------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| kometa_triatlon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 1 Всего: 6 |
Возникла проблема: когда я делаю такое:
Получается бяка: рисуется картинка, потом рисуется новая картинка а старая не стирается, получается след после моего битмапа... Как сделать правильно? Чтобы картинка перемещалась без таких последствий? DirectX что ли использовать... -------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
Ты слишком часто посылаеш WM_PAINT. У этого сообшения есть свойство, в обработчике этого сообшения как правило в конце стоит команда EndPaint, которая убивает все остальные сообшения WM_PAINT в очереди. Можно расчитывать регион, с которого уходит твоя картинка, и закрашивать его фоновым цветом (команда FillRect).
-------------------- Пролетал мимо. |
|||
|
||||
| kometa_triatlon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 1 Всего: 6 |
А если у меня под битмапом находится другая картинка либо линия? (Так и есть). Ведь я же их зарисую тогда.
-------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
1) Перемещение лучше делать по таймеру: рассчитывать новое положение картинки и вызывать Invalidate
2) Рисование (BitBlt) делать только в OnPaint! 3) Чтобы картинка не дергалась, убрать erasebackground - либо вообще, либо чистить только тот участок, который не заполняется картинкой. 4) Все что сверху, рисовать потом. Если движется все содержимое окна (все слои), можно попробовать использовать ScrollDC или ScrollWindow Добавлено @ 10:29 Если изображение сложное (т.е. несколько картинок и графика в разной конфигурации), то, чтобы избежать мерцания, лучше использовать контекст в памяти. -------------------- ... |
|||
|
||||
| kometa_triatlon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 1 Всего: 6 |
А почему рисование делать только в OnPaint?
Я создал отдельную функцию для вывода битмапа, все нормально работает. -------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Я имела в виду - вызывать из OnPaint. Отдельных функций может быть сколько надо. Почему рисовать в OnPaint - потому что оно ровно для того предназначено. Если в твоем обработчике OnPaint не будет нужного кода рисования, при любом его вызове будет затерто то, что ты нарисовал другой функцией. Можно, конечно, рисовать одно и то же и из OnPaint, и в другом месте (скажем, по таймеру), но зачем размножать код (или даже просто вызовы)? -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |