Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Обновление области окна, без мигания?  (Прочитано 8755 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Lamer-Mamer
Гость
« : 01-07-2010 18:28 » 

Доброго времени суток!

Собственно мой вопрос. Написал программу для моделирования столкновения двух тел(шаров) на плоскости.
Изучаю WinAPI на С++, решил взять идею из книги Мозгового М.В. Мастер Класс. В программе решил реализовать визуализацию столкновения(т.к. знаний OpenGL либо DirectX нет, использовал GDI) средствами WinAPI. Ну вот в чем трабла:

Если запустить в цикле перемещение круга(функция Ellipse) из точки А в точку Б, то вслед за кругом остается след(наверное все видели)... Было решено устранить проблему. Я создал отдельную функцию: прямоугольник белого цвета, и при каждой итерации цикла вызывал её, так след от круга заполнялся былым цветом. При этом наблюдается весьма не слабое мигание, вот и спрашиваю, есть ли способы устранения этого бага. А черт его знает...

Вот участок кода:
void UpScrenn(HDC hdc) //Это моя ф-ция.
{
   HBRUSH hBrush;
   hBrush = CreateSolidBrush(RGB(255, 255, 255));
   SelectObject(hdc, hBrush);
   Rectangle(hdc,0,0,1000,100);
   DeleteObject(hBrush);
   

}

void move(HDC hdc,HWND hWnd) //ф-ция движения, шаров.
{
    
   for(...)
   {
      UpScrenn(hdc);      
       
   }
            
     
}   
Скринтош программы прилагаю.   

* Untitled-1.jpg (46.07 Кб - загружено 924 раз.)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 01-07-2010 18:45 » 

Lamer-Mamer, нужно применить двойной буфер. Вот тут описано, как это сделать в MFC , продолжи аналогию на API Улыбаюсь
https://club.shelek.ru/viewart.php?id=322#post_cause
Записан

Lamer-Mamer
Гость
« Ответ #2 : 01-07-2010 19:01 » 

Сейчас посмотрю...
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 01-07-2010 19:07 » 

Lamer-Mamer, вобще-то так не делается в принципе. Стирать ничего не надо. Обычно рисуется по сообщению WM_PAINT. В цикле же необходимо вызывать апдейт окна (Invalidate). Однако это не избавит от мигания. Поэтому читай всё внимательно по линку.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Lamer-Mamer
Гость
« Ответ #4 : 01-07-2010 19:24 » 

https://forum.shelek.ru/index.php/topic,17696.0.html - тоже почитаю.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 01-07-2010 19:36 » 

В расширеном поиске задай BitBlt.

зы Чем обусловлен выбор чистого Win API?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines