CDC从未听说画图怪现象

chen13770960   2009-4-25 17:41 楼主
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,写的字中只有第三行不闪烁,其余闪烁非常厉害

回复评论 (9)

解决闪烁只能用双缓冲了
点赞  2009-4-25 18:16
正常 操作图是要时间的 这会引起闪烁。用内存dc,就行了
点赞  2009-4-25 21:07
果真如此就没什么奇怪了
奇怪的是有的闪烁有的不闪,上面三个输出字符串,有一个不闪,其余的闪烁严重。而且上述如果写的字符串到内存memdc再显示,就不会出现,难道memdc选择了bitmap后就不能继续绘图了吗?
点赞  2009-4-25 22:58
引用: 引用 2 楼 liangxd09 的回复:
正常 操作图是要时间的 这会引起闪烁。用内存dc,就行了


也就是所谓的双缓冲
点赞  2009-4-26 11:54
引用: 引用 3 楼 langfang_wh 的回复:

奇怪的是有的闪烁有的不闪,上面三个输出字符串,有一个不闪,其余的闪烁严重。而且上述如果写的字符串到内存memdc再显示,就不会出现,难道memdc选择了bitmap后就不能继续绘图了吗?

难道是我想歪了,能否来多点提示?
点赞  2009-4-27 12:33
CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC);

.............
最后用bitblt(),呵呵,初学,这个还是知道的
点赞  2009-4-27 12:57
引用: 引用楼主 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);


真是怪了,这和我写的有什么不同吗
点赞  2009-4-27 14:39
用双缓冲区解决闪烁的问题。
点赞  2009-4-27 16:01
感谢各位大侠援手,可我想知道:
1、为什么有一个不闪,其余的闪烁严重。
2、难道memdc选择了bitmap后就不能继续绘图了吗?
点赞  2009-4-27 18:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复