При постоянной перерисовке большого объема графики на диалоговом окне по таймеру эта самая графика начинает мигать и дергаться. Как от этого избавиться?
Re: Мигание окна при постоянной перерисовке графики
Здравствуйте, flower, Вы писали:
F>При постоянной перерисовке большого объема графики на диалоговом окне по таймеру эта самая графика начинает мигать и дергаться. Как от этого избавиться?
Здравствуйте, flower, Вы писали:
F>При постоянной перерисовке большого объема графики на диалоговом окне по таймеру эта самая графика начинает мигать и дергаться. Как от этого избавиться?
Здравствуйте, flower, Вы писали:
F>При постоянной перерисовке большого объема графики на диалоговом окне по таймеру эта самая графика начинает мигать и дергаться. Как от этого избавиться?
Рисовать в буфер, а потом буфер одной функцией выплевывать на экран. Если нужен ипример и вы не сможете его найти — пишите, я код прямо тут помещу
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re[2]: Мигание окна при постоянной перерисовке графики
Здравствуйте, Serguei666, Вы писали:
S>Здравствуйте, flower, Вы писали:
F>При постоянной перерисовке большого объема графики на диалоговом окне по таймеру эта самая графика начинает мигать и дергаться. Как от этого избавиться?
S>Рисовать в буфер, а потом буфер одной функцией выплевывать на экран. Если нужен ипример и вы не сможете его найти — пишите, я код прямо тут помещу
Был бы очень благодарен за пример.
Re[3]: Мигание окна при постоянной перерисовке графики
Здравствуйте, flower, Вы писали:
F>Здравствуйте, Serguei666, Вы писали:
S>Здравствуйте, flower, Вы писали:
F>При постоянной перерисовке большого объема графики на диалоговом окне по таймеру эта самая графика начинает мигать и дергаться. Как от этого избавиться?
S>Рисовать в буфер, а потом буфер одной функцией выплевывать на экран. Если нужен ипример и вы не сможете его найти — пишите, я код прямо тут помещу
F>Был бы очень благодарен за пример.
Тогда такой вот классик. Не мой. Взят с CodeGuru, немного изменен, что делает его чуть менее эффективным. В оригинальном классе не было второго параметра конструктора (CRect&) и прямоугольник брался прямо из DC. Но того кода у меня под рукой нет.
CMemDC pDC(pDC_, Rect);
pDC->FillSolidRect(Rect, RGB(255,255,220)); // вы должны сами заполнять фон, иначе он будет черным
... рисуете что хотите
}
Также надо перекрыть OnEraseBkgnd вашего View и в нем ничего не делать.
BOOL CMyView::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
//return CView::OnEraseBkgnd(pDC);
}
// H файл
#ifndef _MemDC_h_
#define _MemDC_h_
class CMemDC : public CDC
{
public:
// constructor sets up the memory DC
CMemDC(CDC* pDC, CRect &Rect);
// Destructor copies the contents of the mem DC to the original DC
~CMemDC();
// Allow usage as a pointer
CMemDC* operator->() { return this; }
// Allow usage as a pointer
operator CMemDC*() { return this; }
private:
CBitmap m_bitmap; // Offscreen bitmap
CBitmap* m_pOldBitmap; // bitmap originally found in CMemDC
CDC* m_pDC; // Saves CDC passed in constructor
CRect m_rect; // Rectangle of drawing area.
BOOL m_bMemDC; // TRUE if CDC really is a Memory DC.
};
if (m_bMemDC) // Create a Memory DC
{
CreateCompatibleDC(pDC);
m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
m_pOldBitmap = SelectObject(&m_bitmap);
SetWindowOrg(m_rect.left, m_rect.top);
}
else // Make a copy of the relevent parts of the current DC for printing
{
m_bPrinting = pDC->m_bPrinting;
m_hDC = pDC->m_hDC;
m_hAttribDC = pDC->m_hAttribDC;
}
}
CMemDC::~CMemDC()
{
if (m_bMemDC)
{
// Copy the offscreen bitmap onto the screen.
m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
this, m_rect.left, m_rect.top, SRCCOPY);
//Swap back the original bitmap.
SelectObject(m_pOldBitmap);
}
else
{
// All we need to do is replace the DC with an illegal value,
// this keeps us from accidently deleting the handles associated with
// the CDC that was passed to the constructor.
m_hDC = m_hAttribDC = NULL;
}
}