今天没事干,看看技术文章,自己想实现一下GDI+双缓冲。
上网随便GOOGLE一下搜索的,都是同一个答案,但各位有没有发现,这段代码是不能用的!!!
现在先不去深究是GDI+版本问题还是神马其他的原因,现在我只把自己写的可以运行的双缓冲写出来,供大家使用,有更好的,同样欢迎砖头,谢谢!
下面这段代码是在OnPaint里面实现的:
//重写OnPaint()
void CRowContainer::OnPaint() {
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CRect rect;
GetClientRect(&rect);
Bitmap bmp(rect.Width(), rect.Height());
Graphics ghs(&bmp);
LinearGradientBrush lgb(Gdiplus::Rect(m_nStartHPos, m_nStartVPos, m_nWidth, m_nHeight), // 绘制区域
Gdiplus::Color(255, 255, 255, 255), // 第一种颜色
Gdiplus::Color(255, 225, 225, 225), // 第二种颜色
(Gdiplus::REAL)(90));
ghs.SetSmoothingMode(SmoothingModeHighQuality); //这个可以去掉。
hs.FillRectangle(&lgb, Gdiplus::Rect(m_nStartHPos, m_nStartVPos, m_nWidth, m_nHeight));
Graphics g(dc.GetSafeHdc());
g.DrawImage(&bmp, 0, 0); // Do not call CWnd::OnPaint() for painting messages
}