Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251826
  • 博文数量: 89
  • 博客积分: 4246
  • 博客等级: 上校
  • 技术积分: 2184
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-16 09:55
文章分类

全部博文(89)

文章存档

2013年(1)

2012年(17)

2010年(10)

2009年(58)

2008年(3)

我的朋友

分类: C/C++

2010-01-02 21:22:43

方法一:

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

  函数功能:该函数获取窗口客户区的坐标。客户区坐标指定客户区的左上角和右下角。由于客户区坐标是相对子窗口客户区的左上角而言的,因此左上角坐标为(0,0)
  函数原型:BOOL GetClientRect(HWND hWnd,LPRECT lpRect);
  在Visual Studio 2005中,该函数的原型为 void GetWindowRect(LPRECT lpRect) const;
  参数:
  hWnd是程序窗口的句柄。lpRect是一个指标,指向一个RECT型态的rectangle结构.该结构有四个LONG字段,分别为left,top,right和bottom.GetClientRect将这四个字段设定为窗口显示区域的尺寸。left和top字段通常设定为0。right和bottom字段设定为显示区域的宽度和高度(像素点数)。

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 NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.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,并选入新DDB入DC
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 NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.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 NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib。
阅读(1584) | 评论(0) | 转发(0) |
0

上一篇:Invalidate

下一篇:关于CFileDialog的用法[转]

给主人留下些什么吧!~~