Picture控件播放图片闪烁,急!!
求高手帮忙看看啦!很急啊!!!!
C/C++ code
void CTvPlayerDlg::OnPaint() { CPaintDC dc(this); CString strAppFullName; CString strAppPath; GetModuleFileName(AfxGetApp()->m_hInstance, strAppFullName.GetBuffer(MAX_PATH), MAX_PATH); strAppFullName.ReleaseBuffer(); int nPos = 0; nPos = strAppFullName.ReverseFind(_T('\\')); strAppPath = strAppFullName.Left(nPos + 1); CString strPictureName; if(mark == 1) { strPictureName = strAppPath + _T("Bitmap1.bmp"); } if(mark == 2) { strPictureName = strAppPath + _T("Bitmap2.bmp"); } HBITMAP bmpHandle = (HBITMAP)LoadImage(NULL,strPictureName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); CDC mdc; CBitmap bmpPicture; CBitmap *bmpFromHandle = bmpPicture.FromHandle(bmpHandle); CRect rctPicture; m_VideoWindow.GetWindowRect(&rctPicture);//m_VideoWindow是与Picture控件相关联的变量 ScreenToClient(&rctPicture); mdc.CreateCompatibleDC(&dc); CBitmap * bmpPrevious = mdc.SelectObject(bmpFromHandle); BITMAP bmp; bmpPicture.GetBitmap(&bmp); dc.StretchBlt(0, 0,rctPicture.Width(), rctPicture.Height(),&mdc, 0, 0,bmp.bmWidth,bmp.bmHeight, SRCCOPY); dc.BitBlt(rctPicture.left,rctPicture.top,rctPicture.Width(), rctPicture.Height(),&mdc, 0, 0, SRCCOPY); DeleteObject(bmpHandle); } BOOL CTvPlayerDlg::OnEraseBkgnd(CDC* pDC) { return true; }
高手帮忙看看啊!!还有就是图片的大小也不会跟着Picture控件窗口的大小而变化/
现在主要要解决的问题是闪烁,怎么让图片不闪烁???
作者: Happy_BlueSky 发布时间: 2011-06-15
dc.BitBlt(rctPicture.left,rctPicture.top,rctPicture.Width(), rctPicture.Height(),&mdc, 0, 0, SRCCOPY);
贴了2次,当然会闪了!
用多缓冲,在缓冲里面画,贴最终结果,只贴一次!会好些!
作者: fandh 发布时间: 2011-06-15
mdc.SelectObject(bmpFromHandle);--没有对应的环境恢复!容易造成GDI泄露
作者: fandh 发布时间: 2011-06-15
作者: VisualEleven 发布时间: 2011-06-15
dc.StretchBlt(0, 0,rctPicture.Width(), rctPicture.Height(),&mdc, 0, 0,bmp.bmWidth,bmp.bmHeight, SRCCOPY);
dc.BitBlt(rctPicture.left,rctPicture.top,rctPicture.Width(), rctPicture.Height(),&m……
我只用dc.BitBlt()这个也回闪,我多加一个是想改变大小,可也该没改变,
用双缓冲 是怎么用,能否给我改一下,谢谢了,现在很急!!!
作者: Happy_BlueSky 发布时间: 2011-06-15
在内存dc中绘制好,然后一次StretchBlt/BitBlt();到目的DC
能否帮我改一下。。我试了好几次了都不行!!谢谢了
作者: Happy_BlueSky 发布时间: 2011-06-15
作者: fandh 发布时间: 2011-06-15
还有,确定流程是对的?我觉得,你的闪烁,可能还有其它原因!
哦,我不太懂你们说的多缓冲。。。能否把我上面的代码改一下改成双缓冲的我看一下。谢谢了!!!
作者: Happy_BlueSky 发布时间: 2011-06-15
另外,如果图片移动的话,当然会闪,GDI必竟不是DirectX
作者: liulcsy 发布时间: 2011-06-15
这是双缓冲画图的例子!
按照你画的,应该不会闪,应该是其它原因造成的!
作者: fandh 发布时间: 2011-06-15
作者: VisualEleven 发布时间: 2011-06-15