绘图效率如何提升的问题

绿色盒子 绿色盒子 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

void InitBackgroundImage(CDC* pDC)
{
if (m_nModMove==VIEW_MOD_MOVE)
return;

DestroyBackgroundImage();
CRect rectClient;
GetClientRect(&rectClient);
CDC dcBkgnd;
m_dcMemory.CreateCompatibleDC(pDC);
ASSERT(m_dcMemory.GetSafeHdc());
m_bitmapTemp.CreateCompatibleBitmap(pDC,m_nScreenWidth, m_nScreenHeight);
ASSERT(m_bitmapTemp.GetSafeHandle());
m_pOldBitmap = m_dcMemory.SelectObject(&m_bitmapTemp);
m_dcMemory.FillSolidRect(0,0,m_nScreenWidth, m_nScreenHeight,VIEWCOLOR);
DrawBox(&m_dcMemory);//绘制自定义背景图
}
void OnPaint()
{
InitBackgroundImage(&dc);//回背景,背景不改变时不绘制

CDC dcMemory;
dcMemory.CreateCompatibleDC(&m_dcMemory);
CBitmap bmp;
bmp.CreateCompatibleBitmap(&m_dcMemory, m_nScreenWidth, m_nScreenHeight);
CBitmap *pOldBitmap = dcMemory.SelectObject(&bmp);

dcMemory.SetBkMode(TRANSPARENT);
dcMemory.BitBlt(0, 0, m_nScreenWidth, m_nScreenHeight, &m_dcMemory, 0, 0, SRCCOPY);//CDC拷贝

DrawMoveingBox(&dcMemory);//画移动的矩形

dc.BitBlt(0,0,m_nScreenWidth,m_nScreenHeight,&dcMemory,0,0,SRCCOPY);//绘制图片到主DC

dcMemory.SelectObject(pOldBitmap);
dcMemory.DeleteDC();
bmp.DeleteObject();
}

如代码所示m_dcMemory是成员变量,在InitBackgroundImage函数中生成目的是保存背景,不用频繁画背景,只需要在背景上画移动的的矩形即可
理论上我认为这样绘图应该是很快的,但实际测试却发现这样绘图竟然也会在矩形多的时候很卡
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
绿色盒子
界面 15,976 成员 115,866 内容