首页 > 其他分享 >个人写的双缓冲 CDC绘图函数

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

时间:2023-01-24 14:05:32浏览次数:41  
标签:nCurPosX CDC 缓冲 dc bmp SelectObject 绘图 memDC rect

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();

}

标签:nCurPosX,CDC,缓冲,dc,bmp,SelectObject,绘图,memDC,rect
From: https://blog.51cto.com/u_15942605/6022281

相关文章

  • std::string::resize() 对缓冲区一些用处
    如果需要一个缓冲区来暂存字符串会先定义一个char*的数组来实现存完后又给string赋值,感觉有点麻烦,寻思有什么方法可以更优雅点比如如下代码1voidCVTString::StrToWS......
  • 地理信息技术GIS学习(5):矢量数据空间分析-缓冲区、叠置分析等 ;市区选房\超市选址
    一、缓冲区buffer分析 (1)点的缓冲区:学校的服务范围;(2)线的缓冲区:河流红线、路面拓宽需要涉及到哪些拆迁范围;(3)面的缓冲:机场周围的噪音影响范围、湖泊周边的保护区设置。......
  • HTML5绘图基础_09_绘制弧线详解
    ​​CanvasRenderingContext2D​​​​.arc()​​ 是Canvas2DAPI绘制圆弧路径的方法。圆弧路径的圆心在 (x,y) 位置,半径为 r ,根据anticlockwise (默认为顺时针)指......
  • golang无缓冲channel避坑点
    输出结果顺序:默认情况下,channel接收和发送数据都是阻塞的,除非另一端已经准备好。......
  • 在线UML绘图完全免费!
    几个月前,我介绍了​​VisualParadigmCommunityEdition​​​(​​社区版​​​)。它是一个完全免费的桌面​​UML建模工具​​。今天,我想介绍一种基于云技术的​​Visua......
  • FlinkCDC的自定义反序列化
    FlinkCDC的自定义反序列化FlinkCDC的简单使用方法packagecom.pzb;importcom.ververica.cdc.connectors.mysql.MySqlSource;importcom.ververica.cdc.connectors.my......
  • 栈、队列以及环形缓冲区
    栈和队列,都可以不通过指定地址和索引来对数组的元素进行读写。需要临时保存计算过程中的数据、连接在计算机上的设备或者输入输出的数据时,都可以通过这些方法来使用内存。......
  • MSSQL中开启CDC导致事务日志空间被占满事件记录
    问题描述SQLServer中开启CDC之后,在某些情况下会导致事务日志空间被占满的现象为:在执行增删改语句(产生事务日志)的过程中提示,Thetransactionlogfordatabase'***'isfu......
  • HAL库教程11:定时器的缓冲功能与影子寄存器
      在STM32的定时器中,TIMx_PSC、TIM_ARR两个寄存器加上捕捉比较模块中TIMX_CCR寄存器,它们都可以动态修改。不过他们的修改和生效可能不在同一个时刻,或者说,修改过后立即生......
  • “悬空else” 和 “清空缓冲区”
    1.分支语句ifelse中的“悬空else”我们先来看一个代码:光看这个代码,可能很多人会认为打印的是haha,但是其实结果是什么都不打印;我在vs2022上打了这段代码:发现else自动对齐......