VS2010 MFC 窗口大小改变 背景重影的问题

maomao85 2013-12-15 01:00:14
首先我是基于对话框的MFC,我的对话框是可以resize的
其实,我想给对话框添加背景,所以我在OnEraseBkgnd(CDC* pDC)里面,利用GDI+ 双缓冲技术添加背景,代码如下:
BOOL Ctest1Dlg::OnEraseBkgnd(CDC* pDC)
{
CRect rect;
GetClientRect(&rect);

CDC memDC; //首先定义一个显示设备对象
CBitmap bitmap; //定义一个位图对象
CBitmap *pOldBitmap = NULL;
//建立与屏幕显示兼容的内存显示设备,这时还不能绘图,因为没有地方画
memDC.CreateCompatibleDC(pDC);
//建立一个与屏幕显示兼容的位图,至于位图的大小,可以用窗口的大小
bitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
pOldBitmap = memDC.SelectObject(&bitmap);
Graphics graphics( memDC );
Image image(_T("F:\\1.jpg"));
graphics.DrawImage( &image, 0, 0, rect.Width( ), rect.Height( ) );
//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt( 0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY );
memDC.SelectObject(pOldBitmap);
bitmap.DeleteObject();
memDC.DeleteDC();
DeleteObject(pOldBitmap);
return TRUE;
}

可是当我用鼠标改变对话框的大小时,会出现以下现象

请问大家如何解决
...全文
488 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
maomao85 2013-12-15
  • 打赏
  • 举报
回复
引用 5 楼 sd__q 的回复:
[quote=引用 4 楼 maomao85 的回复:] [quote=引用 3 楼 sd__q 的回复:] 把参数TRUE改成FALSE试下
这下是好了,可是用鼠标改变对话框大小的时候,按钮控件会闪烁是什么原因? 还有就是请问加上Invalidate后,为什么重影会消失? 我之前有重影是什么原因?[/quote] MSDN上都有滴[/quote] 还有就是重影问题,我也是不知道原因,是因为之前的背景没有被清除才出现重影吗
maomao85 2013-12-15
  • 打赏
  • 举报
回复
引用 5 楼 sd__q 的回复:
[quote=引用 4 楼 maomao85 的回复:] [quote=引用 3 楼 sd__q 的回复:] 把参数TRUE改成FALSE试下
这下是好了,可是用鼠标改变对话框大小的时候,按钮控件会闪烁是什么原因? 还有就是请问加上Invalidate后,为什么重影会消失? 我之前有重影是什么原因?[/quote] MSDN上都有滴[/quote] 控件闪烁我是真的不知道啊,我都用了双缓冲了
sd__q 2013-12-15
  • 打赏
  • 举报
回复
引用 4 楼 maomao85 的回复:
[quote=引用 3 楼 sd__q 的回复:] 把参数TRUE改成FALSE试下
这下是好了,可是用鼠标改变对话框大小的时候,按钮控件会闪烁是什么原因? 还有就是请问加上Invalidate后,为什么重影会消失? 我之前有重影是什么原因?[/quote] MSDN上都有滴
maomao85 2013-12-15
  • 打赏
  • 举报
回复
引用 3 楼 sd__q 的回复:
把参数TRUE改成FALSE试下
这下是好了,可是用鼠标改变对话框大小的时候,按钮控件会闪烁是什么原因? 还有就是请问加上Invalidate后,为什么重影会消失? 我之前有重影是什么原因?
sd__q 2013-12-15
  • 打赏
  • 举报
回复
把参数TRUE改成FALSE试下
maomao85 2013-12-15
  • 打赏
  • 举报
回复
引用 1 楼 sd__q 的回复:
return true;前面加上
Invalidate(TRUE);


我加上了Invalidate(TRUE);
可是现在遇到新的问题了,窗口大小改变不会出现重影,但是按钮不见了,效果如下:
sd__q 2013-12-15
  • 打赏
  • 举报
回复
return true;前面加上
Invalidate(TRUE);

19,468

社区成员

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

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