CDC从未听说画图怪现象

langfang_wh 2009-04-25 05:41:20
CBitmap m_bitmap
HBITMAP p=SHLoadDIBitmap(_T("\\c.bmp"));
CBitmap m_bitmap.Attach(p);
m_bitmap.GetBitmap(&bm);
CDC pDC = GetDC();
if(!memdc.GetSafeHdc())
{
memdc.CreateCompatibleDC(pDC);
memdc.SelectObject(&m_bitmap);
}
pDC->StretchBlt(AX,AY,ACX,ACY,&memdc,g_ViewPortX,g_ViewPortY,ACX,ACY,SRCCOPY);
pDC->SetBkMode(TRANSPARENT);
pDC->MoveTo(0,ACY/2);
pDC->LineTo(ACX,ACY/2);
pDC->MoveTo(ACX/2,0);
pDC->LineTo(ACX/2,ACY);
pDC->ExtTextOut(30,30,ETO_OPAQUE,NULL,_T("1111"),NULL );
pDC->ExtTextOut(230,30,ETO_OPAQUE,NULL,_T("1222"),NULL );
pDC->ExtTextOut(30,230,ETO_OPAQUE,NULL,_T("1333"),NULL );


怪现象:
1.贴图与后画的线和字不同步,好像图更新的次数多,画的有延迟和缺帧现象
2,写的字中只有第三行不闪烁,其余闪烁非常厉害
...全文
96 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chxy85 2009-04-27
  • 打赏
  • 举报
回复
CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC);

.............
最后用bitblt(),呵呵,初学,这个还是知道的
langfang_wh 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 langfang_wh 的回复:]

奇怪的是有的闪烁有的不闪,上面三个输出字符串,有一个不闪,其余的闪烁严重。而且上述如果写的字符串到内存memdc再显示,就不会出现,难道memdc选择了bitmap后就不能继续绘图了吗?
[/Quote]
难道是我想歪了,能否来多点提示?
langfang_wh 2009-04-27
  • 打赏
  • 举报
回复
感谢各位大侠援手,可我想知道:
1、为什么有一个不闪,其余的闪烁严重。
2、难道memdc选择了bitmap后就不能继续绘图了吗?
wqm_44944 2009-04-27
  • 打赏
  • 举报
回复
用双缓冲区解决闪烁的问题。
langfang_wh 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 langfang_wh 的帖子:]
CDC pDC = GetDC();
if(!memdc.GetSafeHdc())
{
memdc.CreateCompatibleDC(pDC);
memdc.SelectObject(&m_bitmap);
}
pDC->StretchBlt(AX,AY,ACX,ACY,&memdc,g_ViewPortX,g_ViewPortY,ACX,ACY,SRCCOPY);
[/Quote]

真是怪了,这和我写的有什么不同吗
91program 2009-04-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liangxd09 的回复:]
正常 操作图是要时间的 这会引起闪烁。用内存dc,就行了
[/Quote]

也就是所谓的双缓冲
langfang_wh 2009-04-25
  • 打赏
  • 举报
回复
果真如此就没什么奇怪了
奇怪的是有的闪烁有的不闪,上面三个输出字符串,有一个不闪,其余的闪烁严重。而且上述如果写的字符串到内存memdc再显示,就不会出现,难道memdc选择了bitmap后就不能继续绘图了吗?
liangxd09 2009-04-25
  • 打赏
  • 举报
回复
正常 操作图是要时间的 这会引起闪烁。用内存dc,就行了
儿大不由爷 2009-04-25
  • 打赏
  • 举报
回复
解决闪烁只能用双缓冲了

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧