VC++对话框加背景图片设置方法

本文介绍了如何在C++中创建图案刷并将其应用于对话框的背景,包括初始化图案刷、重载OnCtlColor函数以及在OnPaint函数中的应用方法。此外,还详细解释了GetClientRect、StretchBlt、CreateCompatibleDC和SelectObject等关键函数的作用,提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一

1、声明成员变量CBrush m_brush;

2、在InitDialog中添加代码:

 

CBitmap bmp;

bmp.LoadBitmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加

m_brush.CreatePatternBrush(&bmp);

 

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

 

return (HBRUSH)m_brush;

 

 

方法二:

 

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

CPaintDC dc(this);

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加

CBrush brush;

brush.CreatePatternBrush(&bitmap);

CBrush* pOldBrush = dc.SelectObject(&brush);

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

dc.SelectObject(pOldBrush);

 

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

CPaintDC dc(this);

CBitmap m_bmpBK;

m_bmpBK.LoadBitmap(IDB_BITMAP1);

 

CRect rect;

GetClientRect(&rect);//获得目标尺寸,即窗口客户区的坐标

 

BITMAP bitMap;//位图结构体

m_bmpBK.GetBitmap(&bitMap);//获得原图片尺寸

 

CDC dcMem; //目标DC

dcMem.CreateCompatibleDC(&dc); //创建与dc兼容的内存DC

dcMem.SelectObject(&m_bmpBK);//将位图对象m_bmpBK选入内存DC

dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);

 

函数参考:

 

GetClientRect

  函数功能:该函数获取窗口客户区的坐标。客户区坐标指定客户区的左上角和右下角。由于客户区坐标是相对子窗口客户区的左上角而言的,因此左上角坐标为(00

  函数原型:BOOL GetClientRectHWND hWndLPRECT lpRect);

  在Visual Studio 2005中,该函数的原型为 void GetWindowRect(LPRECT lpRect) const;

  参数:

  hWnd是程序窗口的句柄。lpRect是一个指标,指向一个RECT型态的 rectangle结构.该结构有四个LONG字段,分别为left,top,rightbottom.GetClientRect将这四个字段设定为窗口显示区域的尺寸。lefttop字段通常设定为0rightbottom字段设定为显示区域的宽度和高度(像素点数)。

StretchBlt

  函数功能:函数从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩。  函数原型:BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeighDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop);  参数:  hdcDest:指向目标设备环境的句柄。  nXOriginDest:指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。  nYOriginDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。  nWidthDest:指定目标矩形的宽度,按逻辑单位表示宽度。  nHeightDest:指定目标矩形的高度,按逻辑单位表示高茺。  hdcSrc:指向源设备环境的句柄。  nXOriginSrc:指向源矩形区域左上角的X轴坐标,按逻辑单位表示坐标。  nYOriginSrc:指向源矩形区域左上角的Y轴坐标,按逻辑单位表示坐标。  nWidthSrc:指定源矩形的宽度,按逻辑单位表示宽度。  nHeightSrc:指定源矩形的高度,按逻辑单位表示高度。  dwRop:指定要进行的光栅操作。光栅操作码定义了系统如何在输出操作中组合颜色,这些操作包括刷子、源位图和目标位图等对象。参考 BitBlt可了解常用的光栅操作码列表。  返回值:如果函数执行成功,那么返回值为非零,如果函数执行失败,那么返回值为零。Windows NT:若想获得更多的错误信息,请调用GetLastError函数。  速查:Windows NT3.1及以上版本;Windows95及以上版本;Windows CE1.0及以上版本;头文件:wingdi.h:库文件:gdi32.lib。演示代码:CYourView::OnDraw(CDC* pDC)

{

CDC memDC;//定义一个兼容DC

memDC.CreateCompatibleDC(pDC);//创建DC

CBitmap bmpDraw;

bmpDraw.LoadBitmap(ID_BMP) ;//装入DDB

CBitmap* pbmpOld=memDC.SelectObject(&bmpDraw) ;

//保存原有DDB,并选入新DDBDC

pDC->BitBlt(0,0,20,20,&memDC,0,0,SRCCOPY) ;

//将源DC(0,0,20,20) 复制到目的DC(0,0,20,20)

pDC->BitBlt(20,20,40,40,&memDC,0,0,SRCAND);

//将源DC(0,0,20,20)和目的DC(20,20,40,40)中区域进行AND操作

memDC.SelectObject(pbmpOld) ;//选入原DDB

}CreateCompatibleDC

  函数功能:该函数创建一个与指定设备兼容的内存设备上下文环境(DC)。

  函数原型:HDC CreateCompatibleDC(HDC hdc)

  参数:

  hdc:现有设备上下文环境的句柄,如果该句柄为NULL,该函数创建一个与应用程序的当前显示器兼容的内存设备上下文环境。

  返回值:如果成功,则返回内存设备上下文环境的句柄;如果失败,则返回值为NULL

  Windows NT:若想获得更多错误信息,请调用GetLastError函数。

  注释:内存设备上下文环境是仅在内存中存在的设备上下文环境,当内存设备上下文环境被创建时,它的显示界面是标准的一个单色像素宽和一个单色像素高,在一个应用程序可以使用内存设备上下文环境进行绘图操作之前,它必须选择一个高和宽都正确的位图到设备上下文环境中,这可以通过使用CreateCompatibleBitmap函数指定高、宽和色彩组合以满足函数调用的需要。

  当一个内存设备上下文环境创建时,所有的特性都设为缺省值,内存设备上下文环境作为一个普通的设备上下文环境使用,当然也可以设置这些特性为非缺省值,得到它的特性的当前设置,为它选择画笔,刷子和区域。

  CreateCompatibleDc函数只适用于支持光栅操作的设备,应用程序可以通过调用 GetDeviceCaps函数来确定一个设备是否支持这些操作。

  当不再需要内存设备上下文环境时,可调用DeleteDc函数删除它。

  ICM:如果通过该函数的hdc参数传送给该函数设备上下文环境(Dc)对于独立颜色管理(ICM)是能用的,则该函数创建的设备上下文环境(Dc)ICM能用的,资源和目标颜色间隔是在Dc中定义。

  速查:Windows NT3.1及以上版本;Windows95及以上版本;Windows CE1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib

 

SelectObject

  函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。

  函数原型:HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj)

  参数:

  hdc:设备上下文环境的句柄。

  hgdiobj:被选择的对象的句柄,该指定对象必须由如下的函数创建。

  位图:CreateBitmap, CreateBitmapIndirect, CreateCompatible Bitmap, CreateDIBitmap, CreateDIBsection(只有内存设备上下文环境可选择位图,并且在同一时刻只能一个设备上下文环境选择位图)。

  画刷:CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush

  字体:CreateFont, CreateFontIndirect

  笔:CreatePen, CreatePenIndirect

  区域:CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect

  返回值:如果选择对象不是区域并且函数执行成功,那么返回值是被取代的对象的句柄;如果选择对象是区域并且函数执行成功,返回如下一值;

  SIMPLEREGION:区域由单个矩形组成;COMPLEXREGION:区域由多个矩形组成。NULLREGION:区域为空。

  如果发生错误并且选择对象不是一个区域,那么返回值为NULL,否则返回GDI_ERROR

  注释:该函数返回先前指定类型的选择对象,一个应用程序在它使用新对象进行绘制完成之后,应该用新对象替换原始的缺省的对象。

  应用程序不能同时选择一个位图到多个设备上下文环境中。

  ICM:如果被选择的对象是画笔或笔,那么就执行颜色管理。

  速查:Windows NT3.1及以上版本;Windows95及以上版本;Windows CE1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值