MFC Graphics::DrawImage画图刷新背景问题

lwjunz 2013-07-18 02:52:05
继承 CWnd 创建一个自定义控件

void CWindowDateItemButtonEx::OnPaint()
{
CPaintDC dc(this);
Graphics g(dc.m_hDC);

Bitmap bmp(this->mWidth,this->mHeight);
Graphics* gBuf=Graphics::FromImage(&bmp);
gBuf->DrawImage(png_bg,0,0); //把png格式的图片画在控件上
gBuf->画其他图。。。。
delete gBuf;
g.DrawImage(&bmp,0,0);
g.ReleaseHDC(dc.m_hDC);
}

//调用
Invalidate()
RedrawWindow()
UpdateData()
等无法刷新图片,
导致我画在上面的图画,全部叠在一起了,因为无法消除之前画的,所以越画越多
请问各位大神,有没有更好的方法刷新背景或者消除之前画的
...全文
334 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-08-22
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
lwjunz 2013-07-22
  • 打赏
  • 举报
回复
没人看见吗?自己再顶
lwjunz 2013-07-20
  • 打赏
  • 举报
回复
引用 2 楼 rxguoblp 的回复:
创建一个与背景色一致的刷子brush,在每次DrawImage()之前,把客户区刷一遍。FillRect(&brush,&rect)
无用的,背景是照片,而且是无固定或随机的。。 现在用父窗口Invalidate();就可以刷新,但是效果非常闪 用背景来覆盖刷新,之前我也想过,但控件多了之后会不会效率不好?
lwjunz 2013-07-20
  • 打赏
  • 举报
回复
引用 1 楼 lwjunz 的回复:
沙发自己做 另外说明: // 该控件是 // 重新注册窗口类的, LPCTSTR lpszClassName=AfxRegisterWndClass( CS_HREDRAW|CS_VREDRAW , AfxGetApp()->LoadStandardCursor(IDC_ARROW), (HBRUSH)GetStockObject(TRANSPARENT), NULL) ;
无用的,背景是图片,而且是无固定的。。 现在用父窗口Invalidate();就可以刷新,但是效果非常闪
rxguoblp 2013-07-19
  • 打赏
  • 举报
回复
创建一个与背景色一致的刷子brush,在每次DrawImage()之前,把客户区刷一遍。FillRect(&brush,&rect)
lwjunz 2013-07-18
  • 打赏
  • 举报
回复
沙发自己做 另外说明: // 该控件是 // 重新注册窗口类的, LPCTSTR lpszClassName=AfxRegisterWndClass( CS_HREDRAW|CS_VREDRAW , AfxGetApp()->LoadStandardCursor(IDC_ARROW), (HBRUSH)GetStockObject(TRANSPARENT), NULL) ;

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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