个人写的双缓冲 CDC绘图函数

简介: 个人写的双缓冲 CDC绘图函数
void CDRImageStatic::ShowImg(CDC *dc, CRect rect)
{
 CBitmap bmp;
    bmp.CreateCompatibleBitmap(dc, m_nWidth, m_nHeight);
    CBitmap* pOld=NULL;
 CDC memDC;
 memDC.CreateCompatibleDC( dc );
 if (m_nColor!=NULL)
 {  
  EnterCriticalSection(&csImgCriticalSection);
  bmp.SetBitmapBits(sizeof(*m_nColor)*m_nHeight*m_nWidth, m_nColor);
  LeaveCriticalSection(&csImgCriticalSection); 
  pOld = memDC.SelectObject( &bmp );  
 }
 if((m_nDXA==0))
 {
  EnterCriticalSection(&csMyCriticalSection);
  int oldmode=memDC.SetBkMode(TRANSPARENT);
  CPen * pOldPen=memDC.SelectObject(&m_Pen);  
  memDC.MoveTo(rect.right-m_nCurPosX,0);
  memDC.LineTo(rect.right-m_nCurPosX,rect.bottom); 
  memDC.SelectObject(pOldPen);
  memDC.SetBkMode(oldmode);
  BOOL bbR=m_nCurPosX!=m_nOldPosX;
  if (!this->m_blCreateLine || bbR)
  {
   this->m_blCreateLine=TRUE;
   m_nOldPosX=m_nCurPosX;
   InvalidateRect(rect,FALSE);
  }
  memDC.MoveTo(CPoint(0,0));
  LeaveCriticalSection(&csMyCriticalSection);
 }
 dc->BitBlt( rect.left, rect.top, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY );
 if (pOld!=NULL)
 {
  memDC.SelectObject(pOld);
 }
 memDC.DeleteDC();
 bmp.DeleteObject();
}


相关文章
Qt 窗口常用位置API函数 & 绘图原理 & 双缓冲机制 总结
Qt 窗口常用位置API函数 & 绘图原理 & 双缓冲机制 总结
|
API 图形学
【Win32绘图编程,GDI绘图对象】绘图基础,位图处理,绘图消息处理,画笔,画刷,文本绘制(上)
【Win32绘图编程,GDI绘图对象】绘图基础,位图处理,绘图消息处理,画笔,画刷,文本绘制
|
算法 数据可视化 Windows
【Win32绘图编程,GDI绘图对象】绘图基础,位图处理,绘图消息处理,画笔,画刷,文本绘制(下)
【Win32绘图编程,GDI绘图对象】绘图基础,位图处理,绘图消息处理,画笔,画刷,文本绘制
|
Windows
【OpenGL】十九、OpenGL 绘制模式 ( 绘制线框模式 | 绘制点模式 )(二)
【OpenGL】十九、OpenGL 绘制模式 ( 绘制线框模式 | 绘制点模式 )(二)
313 0
【OpenGL】十九、OpenGL 绘制模式 ( 绘制线框模式 | 绘制点模式 )(二)
【OpenGL】十九、OpenGL 绘制模式 ( 绘制线框模式 | 绘制点模式 )(一)
【OpenGL】十九、OpenGL 绘制模式 ( 绘制线框模式 | 绘制点模式 )(一)
617 0
【OpenGL】十九、OpenGL 绘制模式 ( 绘制线框模式 | 绘制点模式 )(一)
|
异构计算
【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )(一)
【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )(一)
463 0
【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )(一)
【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )(二)
【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )(二)
161 0
【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )(二)
【OpenGL】十一、OpenGL 绘制多个点 ( 绘制单个点 | 绘制多个点 )
【OpenGL】十一、OpenGL 绘制多个点 ( 绘制单个点 | 绘制多个点 )
280 0
【OpenGL】十一、OpenGL 绘制多个点 ( 绘制单个点 | 绘制多个点 )