Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задержать выполнение программы 
V
    Опции темы
kometa_triatlon
Дата 5.3.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хочу сделать, чтобы по окну плавно перемещалась картинка. Только плавно не получается, если я задаю цикл, она моментально оказывается в конечной точке. Давно интересовал вопрос, есть ли вообще в С++ или МФС функция, которая задерживает выполнение программы? Ну там sleep, delay....
Хотя может как-то по-другому эту задачу решить? К примеру с помощью таймера?


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
DeadSoul
Дата 5.3.2006, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Sleep()

Можно двигать по таймеру(WM_TIMER)


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
DeadSoul
Дата 5.3.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А ты галочку "Вопрос решен" поставил?


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Coocky
Дата 5.3.2006, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


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

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



Хочу еще добавить. что ОДНИМ Sleep() плавность анимации не обеспечить, но если интересно-можно обсудить smile


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


Опытный
**


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

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



Возникла проблема: когда я делаю такое:
Код

for(;m_iYPos<=20; m_iYPos--)
{
Sleep(5);
InvalidateRect(NULL);
m_pDC->BitBlt(m_iXPos, m_iYPOs, 46, 48, ...);
}

Получается бяка: рисуется картинка, потом рисуется новая картинка а старая не стирается, получается след после моего битмапа...

Как сделать правильно? Чтобы картинка перемещалась без таких последствий? DirectX что ли использовать...


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
Fin
Дата 5.3.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


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

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



Ты слишком часто посылаеш WM_PAINT. У этого сообшения есть свойство, в обработчике этого сообшения как правило в конце стоит команда EndPaint, которая убивает все остальные сообшения WM_PAINT в очереди. Можно расчитывать регион, с которого уходит твоя картинка, и закрашивать его фоновым цветом (команда FillRect).


--------------------
Пролетал мимо.
PM MAIL   Вверх
kometa_triatlon
Дата 6.3.2006, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А если у меня под битмапом находится другая картинка либо линия? (Так и есть). Ведь я же их зарисую тогда.


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
Earnest
Дата 6.3.2006, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



1) Перемещение лучше делать по таймеру: рассчитывать новое положение картинки и вызывать Invalidate
2) Рисование (BitBlt) делать только в OnPaint!
3) Чтобы картинка не дергалась, убрать erasebackground - либо вообще, либо чистить только тот участок, который не заполняется картинкой.
4) Все что сверху, рисовать потом.

Если движется все содержимое окна (все слои), можно попробовать использовать ScrollDC или ScrollWindow
Добавлено @ 10:29
Если изображение сложное (т.е. несколько картинок и графика в разной конфигурации), то, чтобы избежать мерцания, лучше использовать контекст в памяти.


--------------------
...
PM   Вверх
kometa_triatlon
Дата 8.3.2006, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А почему рисование делать только в OnPaint?
Я создал отдельную функцию для вывода битмапа, все нормально работает.


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
Earnest
Дата 9.3.2006, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(kometa_triatlon @ 8.3.2006, 19:32 Найти цитируемый пост)
А почему рисование делать только в OnPaint?

Я имела в виду - вызывать из OnPaint. Отдельных функций может быть сколько надо.
Почему рисовать в OnPaint - потому что оно ровно для того предназначено. Если в твоем обработчике OnPaint не будет нужного кода рисования, при любом его вызове будет затерто то, что ты нарисовал другой функцией. Можно, конечно, рисовать одно и то же и из OnPaint, и в другом месте (скажем, по таймеру), но зачем размножать код (или даже просто вызовы)?




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


 




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


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

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