Witam
Kontrolka CListCtrl w MFC podczas przewijania dużej ilości danych nieprzyjemnie miga. Można przypisać jej styl LVS_EX_DOUBLEBUFFER, który powinien to wyeliminować. Problem w tym że to nie działa. W dokumentacji jest napisane że działać to będzie od Windows XP w górę, ale u mnie to nic nie daje. Czy komuś z Was udało się to zastosować?
0
0
Usiadłem znów do tego problemu. Podwójne buforowanie nic nie daje jeżeli na liście jest dużo kolumn. Działa to wtedy strasznie wolno.
Chciałbym samemu wszystko rysować w metodzie OnPaint listy, jest jednak jeden problem:
Kod:
void CMyList::OnPaint()
{
CPaintDC dc(this);
CRect rc;
GetClientRect(&rc);
CDC MemoryDC;
CBitmap Bitmap;
CBrush Brush;
MemoryDC.CreateCompatibleDC(&dc);
Bitmap.CreateCompatibleBitmap(&dc, rc.Width(), rc.Height());
CBitmap *pOldBitmap = MemoryDC.SelectObject(&Bitmap);
Brush.CreateSolidBrush(RGB(200,200,200));
MemoryDC.FillRect(&CRect(0,0, rc.Width(), rc.Height()), &Brush);
MemoryDC.Rectangle(10,10,100,100);
CRect rcDraw = rc - rc.TopLeft();
dc.BitBlt(rc.left,rc.top, rc.Width(),rc.Height(), &MemoryDC, rcDraw.left,rcDraw.top, SRCCOPY);
}
Wszystko byłoby ok, gdyby nie to że przy przewijaniu listy suwakami, cała zawartość się zamazuje. Zamiast całość narysować od nowa, lista próbuje przesunąć to co już jest.
Jeżeli natomiast użyję:
Kod:
CDC *dc;
dc = this->GetDC();
To wtedy rysuje i przewija się poprawnie, ale OnPaint jest wykonywane bez przerwy. Jak to ugryźć?