Flickerproblem on some machines
Hallo
I want to draw a header in an own view that slowly fades out.
My current approach is to start some timers that invalidate a rectangle
and draw the box with some gdi+ functions. See (the simplified) code below.
On some machines I get a very anoying flicker by using InvalidateRect(). The
reason is unknown.
Does anyone know a better solution to display some text that is fading out?
(Btw: I can't use drawing in a custom NC-Area as I get problems with CSplitterWnd)
thx
Tom Becker
void CMyView::OnDraw(CDC* pDC)
{
if(m_alphaHeading > 0)
{
Gdiplus::Graphics graphics(pDC->m_hDC);
DWORD capCol = GetSysColor(COLOR_ACTIVECAPTION);
Gdiplus::SolidBrush brushBG(Gdiplus::Color(m_alphaHeading, GetRValue(capCol), GetGValue(capCol), GetBValue(capCol)));
graphics.FillRectangle(&brushBG, m_titleRect);
//Write some additional text
...
}
}
void CMyView::OnTimer(UINT nIDEvent)
{
if(nIDEvent == ID_TM_FADE_TITLE_START)
{
KillTimer(ID_TM_FADE_TITLE_START);
m_alphaHeading = 255;
SetTimer(ID_TM_FADE_TITLE, 50, 0);
return;
}
if(nIDEvent == ID_TM_FADE_TITLE)
{
if(m_alphaHeading == 0)
KillTimer(ID_TM_FADE_TITLE);
else
{
m_alphaHeading--;
InvalidateRect(titleRect, false);
}
return;
}
CFormView::OnTimer(nIDEvent);
}