[声明]
CPen* SelectObject( CPen* pPen );
CBrush* SelectObject( CBrush* pBrush );
virtual CFont* SelectObject( CFont* pFont );
CBitmap* SelectObject( CBitmap* pBitmap );
int SelectObject( CRgn* pRgn );
CGdiObject* SelectObject( CGdiObject* pObject );
[功能]
函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。
函数原型: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,否则返回HGDI_ERROR。
注释:该函数返回先前指定类型的选择对象,一个应用程序在它使用新对象进行绘制完成之后,应该用原始的缺省的对象替换新对象。
应用程序不能同时选择一个位图到多个设备上下文环境中。
ICM:如果被选择的对象是画笔或笔,那么就执行颜色管理。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib。
[范例]
HDC hdc=GetDC(hwnd); HDC memdc=CreateCompatibleDC(hdc); RECT rc; BITMAP bmp; HBITMAP holdbmp,hbmp=LoadBitmap(hInstDVBRes,MAKEINTRESOURCE(IDB_CLOCK));//从资源加载位图 holdbmp=(HBITMAP)SelectObject(memdc,hbmp);//这里把hbmp的位图选择到兼容DC memdc,之后这个兼容DC就拥有和 //hbmp同样大小的绘图区域,注意超出位图返回的GDI输出都是无效的. GetObject(hbmp,sizeof(BITMAP),&bmp);//这里获取位图的大小信息,事实上也是兼容DC绘图输出的范围 SetRect(&rc,0,0,bmp.bmWidth,bmp.bmHeight); DrawText(memdc,"Center Line Text" -1,&rc,DT_VCENTER|DT_SINGLELINE|DT_CENTER);//在兼容DC中间位置输出字符串 //这样以来我们就相当于把hbmp这个位图加上了文字标注,我们可以把这个增加了文字标注的位图保存起来.一个简单的图像处理基本就OK了. SelectObject(memdc,holdbmp);//复原兼容DC数据. DeleteDC(memdc);