一个关于“脏矩阵”绘图的问题

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

CDC* pDC = GetDC();
if ( m_bCircling )
{//滚动显示,只显示一张照片
if ( m_memBKDC.m_hDC )
{
pDC->BitBlt(0, 0, m_PicPreSize.cx, m_PicPreSize.cy, &m_memBKDC, 0, 0, SRCCOPY);
TRACE("背景覆盖");
DeleteObject(m_memBmp);
m_memBKDC.DeleteDC();
}
m_memBKDC.CreateCompatibleDC(pDC);
CMyBMP* pMyBmp = new CMyBMP;
InitialBMPEx(pMyBmp);
m_PicExPos.cx = (m_size.cx - pMyBmp->m_size.cx)/2;
m_PicExPos.cy = (m_size.cy - pMyBmp->m_size.cy)/2;
m_PicPrePos = m_PicExPos;
m_PicPreSize = pMyBmp->m_size;
m_PicExSize = pMyBmp->m_size;
m_memBmp = CreateCompatibleBitmap(m_memBKDC.m_hDC, m_PicExSize.cx, m_PicExSize.cy);
m_memBKDC.SelectObject(m_memBmp);
m_memBKDC.BitBlt(0, 0, m_PicExSize.cx, m_PicExSize.cy, pDC, m_PicExPos.cx, m_PicExPos.cy, SRCCOPY);
CBmpSpecialShow::SpecialShow(0, pDC, m_PicExPos.cx, m_PicExPos.cy, pMyBmp->m_Bmp, pMyBmp->m_size);
CRect rcText((m_size.cx-pMyBmp->m_size.cx)/2, (m_size.cy+pMyBmp->m_size.cy)/2, pMyBmp->m_size.cx, pMyBmp->m_size.cy/10 );
pDC->SetBkMode(TRANSPARENT);
pDC->DrawText(pMyBmp->m_strName, rcText, DT_CENTER | DT_VCENTER);
TRACE(pMyBmp->m_strName);
TRACE("\n");
}




思路:

整个对话框的背景是在另外一个函数里面绘制的
这里是绘制前景
绘制第一副图片的时候
得到图片的区域左上角坐标以及区域的宽,高
然后把屏幕DC上面的东西保存到内存dc里面
在下一次绘制前景(新图片)的时候
仅仅把原本那个“被弄脏”的区域覆盖回去
然后再生成一个新的区域,把背景保存到内存里面
然后再贴新的图片
...
循环
但是发现效果和想象中不同
求教
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
skypu
界面 15,976 成员 115,866 内容