Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Блики при скроллинге


Автор: torero 3.9.2007, 18:19
     У меня "вид" на основе CView, но в этот "вид" вложено ещё одно окно:
Код

              CWnd *pViv;
              pViv=new CWnd;
          pViv->Create(NULL,NULL,WS_VISIBLE|WS_CHILD,CRect(x1,y1,xk,yk),this,11);
   Для вывода в окно информации, использую хэндл dc:
              CClientDC dc(pViv);
   А, чтобы при скроллинге не было мерцаний, хотел использовать метод:
              OnEraseBkgnd(CDC* pDC);
              return TRUE;
   Но pDC относится к клиентской области "вида". А окно pViv уже не клиентская
   область. Можно ли использовать OnEraseBkgnd для неклиентского окна?

   Сам скроллинг я делаю так:
   1. Меняю начало координат x0 и y0 и вызываю метод  dc.SetWindowOrg(x0,y0);
   2. Закрашиваю окно  dc.FillSolidRect(rect,pDoc->m_BGColor );
   3. Вывожу информацию снова.
   Может быть здесь что-то изменить? В тех "видах", которые сделаны на основе
   класса CScrollView нет мерцания, как это сделано?
             

Автор: Lazin 3.9.2007, 19:40
Цитата(torero @ 3.9.2007,  18:19)
Может быть здесь что-то изменить? В тех "видах", которые сделаны на основе
   класса CScrollView нет мерцания, как это сделано?

это двойная буферизация, сначало нужно рисовать в буфер а потом на экран

Автор: torero 4.9.2007, 03:38
Lazin, непонятно.  Что такое буфер? Если это переменные: int,CString и т. д.
   то они уже есть. Какая здесь технология?


Автор: Lazin 4.9.2007, 07:49
Мерцание происходит из за того что сразу рисуешь в окне.

Двойная буферизация - это когда создаешь нужное изображение в памяти, а потом рисуешь его в окне.

Автор: torero 4.9.2007, 18:03
    А как создать изображение в памяти? В CMemFile  записать или ещё как?

Автор: _hunter 4.9.2007, 18:17
http://forum.vingrad.ru/forum/topic-168084.html

Автор: torero 6.9.2007, 17:57
     Спасибо за советы, разобрался и сделал свой пример. Работает.
   Но при скроллинге перемещение происходит с большим запаздыванием. И даже, когда
   закрываю программу (по Exit), то закрывается она в течении семи секунд.
   Отчего это может быть?

Автор: zkv 6.9.2007, 18:02
Цитата(torero @  6.9.2007,  17:57 Найти цитируемый пост)
 Отчего это может быть? 

вероятно, что-то неправильно сделал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)