本文共 761 字,大约阅读时间需要 2 分钟。
自绘CListBox时避免闪烁的方法。
先列出网上搜来的一段例子双缓冲绘制代码:
CRect rc; GetWindowRect(&rc); CDC CMDC; CMDC.CreateCompatibleDC(NULL); CBitmap bmp; bmp.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height()); CBitmap * oldbmp =CMDC.SelectObject(&bmp); BITMAP bm; bmp.GetBitmap(&bm); CMDC.FillSolidRect(0,0,rc.Width(),rc.Height(),m_refdefbkColor); // pDC为前端DC pDC->bitBlt(0,0,rc.Width(),rc.Height(),&CMDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); CMDC.SelectObject(oldbmp); bmp.DeleteObject(); CMDC.DeleteDC();
具体做法为:
1.onerasebkgnd直接返回TRUE.
2.DrawItem和OnPaint双缓冲自绘。
这样基本是不会闪烁的。
如果在删除Item的时候删除并且有scrollbar情况下删除完后背景不会被item重绘,可以考虑setcursel(getcount()-1),假如为删除最后一个item,
并且settopindex这样就不会闪烁了。
以上是我在做自绘clistbox中遇到闪烁情况的解决方法,这样处理后频繁的invalidate不会闪烁。
转载地址:http://ahycb.baihongyu.com/