修改对话框背景

第一种方法。

1.在对话框类声名

1
CBrush m_bkBrush;

2.在InitDialog中添加代码
1
2
3
CBitmap tmpBitmap;
tmpBitmap.LoadBitmap(IDB_BITMAP_ASCENT); // IDB_BITMAP_ASCENT背景资源的ID
m_bkBrush.CreatePatternBrush(&bmp); // 创建背景刷

3。响应WM_CTCOLOR消息。在OnCtlColor增加代码 ,删除原有的

1
2
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);     return hbr;
return m_bkBrush; // 返回刚才创建的背景刷子

第二种方法

在对话上放置Picture Control控件,设置属性Type为Bitmap。Image为IDB_BITMAP_ASCENT(背景资源ID)

按ctrl+d,设置Picture Control控件的ID为1。

第三种方法

响应WM_PANT消息在OnPant()中绘制背景,代码如下。

1
2
3
4
5
6
7
8
9
10
CPaintDC dc(this);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP_ASCENT); //IDB_BITMAP_ASCENT背景资源的ID
CBrush brush;
brush.CreatePatternBrush(&bitmap);
CBrush* pOldBrush = dc.SelectObject(&brush);
CRect rect;
GetWindowRect(rect); // 获取窗口大小
dc.Rectangle(rect); // rect为对话框窗口大小
dc.SelectObject(pOldBrush);

第四种方法

响应WM_PANT消息在OnPant()中绘制背景,使用StretchBlt()。

1
2
3
4
5
6
7
8
9
10
11
CPaintDC dc(this);
CBitmap bkBmp;
bkBmp.LoadBitmap(IDB_BITMAP_ASCENT);
CRect rect;
GetClientRect(&rect);//获得窗口客户区大小
BITMAP bitMap;//位图结构体
bkBmp.GetBitmap(&bitMap);//获得原图尺寸
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);//创建兼容DC
dcMem.SelectObject(&bkBmp);//将位图选入DC
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY); // 贴图