mfc 双缓冲
void CDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
dc.FillSolidRect(&rect, RGB(0x7d,0x9e,0xc0));//背景色
//
m_picVideo2.GetWindowRect(rect);
ScreenToClient(rect);
//
// Initialize DIB for drawing...
hdib=::DrawDibOpen();
m_hdc = dc.GetSafeHdc();
//
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
CBitmap *pOldBit = MemDC.SelectObject(&MemBitmap);
if(hdib!=NULL)
{
::DrawDibBegin(hdib,MemDC,
rect.Width(), //-1 don't stretch
rect.Height(), //-1 don't stretch
&m_bmpHdr.bmiHeader,
m_iOutWidth, // width of image
m_iOutHeight, // height of image
0
);
}
if (pRgbOutTemp != NULL)
{
::DrawDibDraw(hdib,
MemDC,
rect.left-490, // dest : left pos
rect.top-245, // dest : top pos
-1, // -1 don't zoom x
-1, // -1 don't zoom y
&m_bmpHdr.bmiHeader, // bmp header info
pRgbOutTemp, // 将实时视频转成的rgb
0, // src :left
0, // src :top
m_iOutWidth, // src : width
m_iOutHeight, // src : height
DDF_SAME_DRAW // use prev params....
);
}
//
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
dc.SelectObject(pOldBit);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}
大家帮我看下我的代码有问题吗?
{
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
dc.FillSolidRect(&rect, RGB(0x7d,0x9e,0xc0));//背景色
//
m_picVideo2.GetWindowRect(rect);
ScreenToClient(rect);
//
// Initialize DIB for drawing...
hdib=::DrawDibOpen();
m_hdc = dc.GetSafeHdc();
//
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
CBitmap *pOldBit = MemDC.SelectObject(&MemBitmap);
if(hdib!=NULL)
{
::DrawDibBegin(hdib,MemDC,
rect.Width(), //-1 don't stretch
rect.Height(), //-1 don't stretch
&m_bmpHdr.bmiHeader,
m_iOutWidth, // width of image
m_iOutHeight, // height of image
0
);
}
if (pRgbOutTemp != NULL)
{
::DrawDibDraw(hdib,
MemDC,
rect.left-490, // dest : left pos
rect.top-245, // dest : top pos
-1, // -1 don't zoom x
-1, // -1 don't zoom y
&m_bmpHdr.bmiHeader, // bmp header info
pRgbOutTemp, // 将实时视频转成的rgb
0, // src :left
0, // src :top
m_iOutWidth, // src : width
m_iOutHeight, // src : height
DDF_SAME_DRAW // use prev params....
);
}
//
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
dc.SelectObject(pOldBit);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}
大家帮我看下我的代码有问题吗?
...全文
相关推荐
MFC双缓冲绘图源码
在MFC中,我们可以利用CDC(Device Context)类来实现双缓冲。CDC是MFC对Windows设备上下文的封装,提供了丰富的绘图操作接口。
MFC_双缓冲技术
双缓冲技术
MFC双缓冲显示位图
void CGraphicView::OnDraw(CDC* pDC) { CGraphicDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here CFont *oldFont = pDC->SelectObject(&
MFC双缓冲画图实时显示
在MFC中,实现双缓冲画图通常涉及到以下步骤:1.
MFC 双缓冲画图小例子
在本文中,我们将深入探讨MFC(Microsoft Foundation Classes)中的双缓冲画图技术,并通过一个简单的小实例程序来展示其工作原理。


