2024年4月19日发(作者:)

方法一:

1、声明成员变量CBrush m_brush;

2、在InitDialog中添加代码:

?

CBitmap bmp;

tmap(IDB_BITMAP1); //IDB_BITMAP1是图片资源ID

m_PatternBrush(&bmp);

3、重载对话框的OnCtlColor,改最后的返回值:

?

return(HBRUSH)m_brush;

1

方法二:

把下面这段代码加进OnPaint()里就行了

?

CPaintDC dc(this);

CBitmap bitmap;

tmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加

CBrush brush;

PatternBrush(&bitmap);

CBrush* pOldBrush = Object(&brush);

gle(0,0,200,200); // 这些参数可以调整图片添加位置和大小

Object(pOldBrush);

方法三:使用StretchBlt()函数,具有图像自适应窗体功能

?

CPaintDC dc(this);

CBitmap bitmap;

tmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加

CBrush brush;

PatternBrush(&bitmap);

CBrush* pOldBrush = Object(&brush);

gle(0,0,200,200); // 这些参数可以调整图片添加位置和大小

Object(pOldBrush);

问题

有的程序员希望在自己的应用程序中以有趣味的位图来代替对话框中令人讨厌的灰色

背景,希望位图在对话框中看起来象墙纸而且并不影响对话框中的控制或静态文本的显示。

许多程序员找不到一个改变窗口背景的简单方法,是否有方法利用 Windows API 函

数来改变对话框的背景为某个位图呢?

方法

改变对话框的背景为某个位图并不困难,关键是需要清楚对话框和窗口是如何设置背

景颜色的,以及程序员应该如何修改对话框和窗口改变显示的行为。

当 Windows 准备改变对话框背景的颜色时,通常发送两个消息给对话框。第一个消

息是 WM_ERASEBKGND,此消息指示对话框绘制对话框的背景颜色,以“抹去”屏幕上对

话框显示区域的任何显示。

第二个消息是 WM_CTLCOLOR,发送此消息给对话框或窗口来表示 Windows 需要

知道对话框中控制的颜色。

在本节中,将重置对消息 WM_ERASEBKGND 的处理,以便将位图绘制在窗口的背

景上。另外,将重置对消息 WM_CTLCOLOR 的处理,以避免对话框中的控制“剪补”位图。

最后的结果是对话框的背景位图绘制在对话框背景上,控制在背景位图的“上面”。

步骤

按照下列步骤实现一个例子程序。运行此例子程序,选择菜单 Dialog 和菜单项

Bitmap Background,将弹出一个对话框,显示背景位图和几个控制。

实现例子程序的具体步骤如下:

1.在 Visual C++ 中,利用 AppWizard 创建新的项目文件,并命名此项目文件为

Ld145。

2.进入资源编辑器并创建新的对话框模板。在对话框中,添加几个静态文本域和编辑

域,以及几个单选按钮和列表框。对话框的实际组成并不重要,只要能够覆盖部分位图就可

以了。

3.选择 ClassWizard,为刚创建的对话框模板创建对话框类,新类命名为

CBitmaPBkgdDlg。

4.在资源编辑器中创建新的位图。

5.进入 ClassWizard,从下拉列表中选择 CBitmapBkgdDlg,从对象列表中选择对象

CBitmapBkgdDlg,从消息列表中选择消息 WM_INITDIALOG,点击按钮 Add Function,

在 CBitmapBkgdDlg 的方法 OnInitDialog 中添加下列代码: