MFC 背景图像问题

Posted

技术标签:

【中文标题】MFC 背景图像问题【英文标题】:MFC Background image issue 【发布时间】:2014-02-02 20:37:53 【问题描述】:

我在窗口中添加了背景图片,但其他图片没有出现。

背景图片与其他图片重叠

图片:

http://i.stack.imgur.com/efb2z.png

如何解决?

代码

/* ENTER */
CPngImage imagea;
imagea.Load(IDB_PNG1);

image.SetBitmap((HBITMAP)imagea.Detach());

/*  PROGRESS BAR */
CPngImage imageaa;
imageaa.Load(IDB_PNG2);

image2.SetBitmap((HBITMAP)imageaa.Detach());

/* BACKGROUND */    
CPngImage imageaaa;
imageaaa.Load(IDB_PNG3);

image3.SetBitmap((HBITMAP)imageaaa.Detach());

新问题 http://i.stack.imgur.com/wIurg.png

【问题讨论】:

你会在其他所有内容之后绘制背景图像吗?否则我们需要看一些代码... 我对@9​​87654324@ 不是很熟悉,但这对我来说似乎是在加载图像(?)我对你绘制imageimage2、@ 的代码更感兴趣987654327@. “背景图片”是什么意思?你的意思是在视图内数据背后的背景中,还是在 MDI 子窗口后面的背景中,或者...? 【参考方案1】:

您是否正确使用SetWindowPos 功能?

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633545%28v=vs.85%29.aspx

【讨论】:

【参考方案2】:

您需要使用 OnEraseBackground()。

【讨论】:

【参考方案3】:

制作背景图片有两种方法: - 直接在 OnEraseBackground() 中的对话框上绘制 - 将图像放在所有其他控件的后面

每种方法都有一些微妙的优点和缺点,但对于大多数应用程序来说,两者都应该工作。看来您使用的是第二种方法。您需要做的是确保后台控件一直位于控件堆栈的底部(z-pos - 使用 SetWindowPos() 将其发送到后台,或者只是在所有其他人之前创建它,但是您可以'不要使用对话框编辑器),还要确保你的后台控件设置了 WS_CLIPSIBLINGS。

【讨论】:

【参考方案4】:

CPngImage 支持 MFC 框架基础结构,并不打算直接从您的代码中使用。

【讨论】:

以上是关于MFC 背景图像问题的主要内容,如果未能解决你的问题,请参考以下文章

如何用vc6.0 来做图像处理?是用mfc工程吗,然后导入图像么? 如何去掉图像的背景,然后反转

如何给MFC对话框设置背景图片

怎么给MFC的对话框加背景图片

MFC给对话框设置统一风格背景图,wince 6.0应用程序

MFC的一个对话框中怎样将设置的背景图片替换

如何在 mfc 中更改 CImage 对象的背景颜色?