对话框中运用双缓冲
对话框中使用双缓冲
代码如上,不知道什么问题,重绘还是有闪烁的问题,特别是对话框上面的按钮!
------解决方案--------------------
dc.SetBkMode(TRANSPARENT)看看
------解决方案--------------------
OnEraseBkgnd 有没有 return TRUE ?
对话框风格有没有设置CLIP_CHILDREN风格?
------解决方案--------------------
是重绘的整个对话框吧,上面的按钮当然要重绘了。试试只重绘不包括按钮的区域
- C/C++ code
void CMfcTestDlg::OnPaint() { CPaintDC dc(this); DrawLine(&dc); } void CMfcTestDlg::DrawLine(CDC *pDC) { CRect rect; GetClientRect(&rect); CDC dc;//创建用于作图的内存DC CBitmap bmp;//内存中承载临时图像的位图 dc.CreateCompatibleDC(pDC);//创建兼容内存DC bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());//创建兼容的位图 dc.SelectObject(&bmp); srand((unsigned int) time(NULL)); dc.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255)); CPen pen(PS_SOLID,2,RGB(0,255,30)); dc.SelectObject(&pen); for (int i =0 ;i != 30;i++) { dc.MoveTo(20,i+20*i); dc.LineTo(800,i+20*i); } for (i =0;i != 10;i++) { int x,y; x = rand()%741; y = rand()%564; dc.LineTo(x,y); } pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);//缓冲区的图像拷到前台 dc.DeleteDC(); bmp.DeleteObject(); }
代码如上,不知道什么问题,重绘还是有闪烁的问题,特别是对话框上面的按钮!
------解决方案--------------------
dc.SetBkMode(TRANSPARENT)看看
------解决方案--------------------
OnEraseBkgnd 有没有 return TRUE ?
对话框风格有没有设置CLIP_CHILDREN风格?
------解决方案--------------------
是重绘的整个对话框吧,上面的按钮当然要重绘了。试试只重绘不包括按钮的区域