delphi中如何实现C中的OnEraseBkgnd

fangzhouyu 2009-11-15 02:20:05
在用delphi写采集卡的显示程序,原采集卡例程是用c写的,我对c不熟悉,而且对图像处理也不熟悉,很多看不明白,
例程中显示图像我认为主要是在这两个事件中完成的,高手帮忙指点下

BOOL COsdDlg::OnEraseBkgnd(CDC* pDC)
{
//*
CreateCacheBmp(pDC);
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap *pOldBmp = dcMem.SelectObject(&m_bmpCache);
CRect rc;
GetClientRect(rc);
dcMem.FillSolidRect(rc,COLOR_OVERLAY);
PaintIfNoVideo(&dcMem);
PaintOsd(&dcMem);
pDC->BitBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldBmp);
return TRUE;
//*/
return CDialog::OnEraseBkgnd(pDC);
}

void COsdDlg::CreateCacheBmp(CDC *pDC)
{
ASSERT(IsWindow(m_hWnd));

CRect rc;
GetClientRect(rc);
if(m_bmpCache.GetSafeHandle() == NULL)
m_bmpCache.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
else
{
BITMAP bmp;
m_bmpCache.GetBitmap(&bmp);
if(bmp.bmWidth != rc.Width() || bmp.bmHeight != rc.Height())
{
m_bmpCache.DeleteObject();
m_bmpCache.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
}
}
}
...全文
83 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
buding79 2009-12-17
  • 打赏
  • 举报
回复
参考一下。
fangzhouyu 2009-11-15
  • 打赏
  • 举报
回复
不好意思,是C++
问下在CreateCompatibleDC后建立内存dC后,怎么能跟实际采集卡关联,把采集卡数据写到内存Dc中
Seamour 2009-11-15
  • 打赏
  • 举报
回复
明明是c++,根c一点儿关系都没有
lengfengxiaodao 2009-11-15
  • 打赏
  • 举报
回复

procedure WMERASEBKGND(var Msg: TWMERASEBKGND); message WM_ERASEBKGND;
begin
end;

写到这里边就可以,要不你写到ONPAINT 里也可以,
gyk120 2009-11-15
  • 打赏
  • 举报
回复
这些都是API啊……直接这么调用不行吗?

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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