c++点滴

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

接着练

GDI对像

Windows的GDI对象类型是通过MFC中的类来表示的,而CGdiObject正是所有GDI对象类的抽象基类,即Windows的GDI对象是通过CGdiObject派生类的C++对象来表示的。如:CBitmap、CBrush、CFont、CPallete、CPen、CRgn.......

GDI对象存储在什么地方呢?GDI对象存储在系统范围内的固定大小的对象表中,称之为对象句柄表,GDI对象表是一个固定大小的表,在win2000/NT允许最多有16384个GDI句柄。GDI对象有许多专用的例程以创建该类型的一个新的GDI对象。一旦创建完成GDI对象,GDI将返回一个GDI对象句柄,当GDI对象不用时,要用DeleteObject函数删除哦,但要确保没该对象没有处在设备上下文中,不然会导致潜在的GDI对象泄露

HGDIOBJ SelectObject(HDC hdc,HGDIOBJ hgdiobj);//将GDI对象和一个设备上下文相连接
BOOL DeleteObject(HGDIOBJ hgdiobj);//删除GDI对象
DWORD GetObjectType(HGDIOBJ h);//确定指定对象类型
int GetObject(HGDIOBJ hgdiobj,int cbBuffer,LPVOID lpvObject);//将指定对象的信息写入到缓冲区


下面以CPen对象来练练上面的四个函数。

//SelectObject和DeleteObject用法

CPen p,
*oldPen;
p.CreatePen(PS_SOLID,
1,RGB(255,255,0));
HDC hdc
=::GetDC(this->m_hWnd);
oldPen
=(CPen*)SelectObject(hdc,p.GetSafeHandle());
MoveEx(hdc,
0,0,NULL);
LineTo(hdc,
100,100);
SelectObject(hdc,oldPen);
DeleteObject(p.GetSafehandle());
::ReleaseDC(
this->m_hWnd,hdc);

 

/*
DWORD GetObjectType(HGDIOBj h);
返回值:
OBJ_BITMAP(位图Bitmap)
OBJ_BRUSH(刷子Brush)
OBJ_PAL(调色版Palette)
OBJ_PEN(画笔Pen)
OBJ_EXTPEN(扩展画笔Extended pen)
OBJ_REGION(区域 Regioin)
OBJ_DC(设备上下文 Device context)
OBJ_MEMDC(存储设备上下文Memory DC)
OBJ_METAFILE(元文件Metafile)
OBJ_METADC(元文件设备上下文Metafile DC)
OBJ_ENHMETAFILE(扩展元文件Enhanced metafile)
OBJ_ENHMATADC(扩展元文件设备上下文Enhanced metafileD C)
*/
CPen p;
p.CreatePen(PS_SOLID,
1,RGB(255,255,0));

if(OBJ_PEN == GetObjectType(p.GetSafeHandle()))
{
   MessageBox(_T(
"CPen对象"),"信息");
}

p.DeleteObject();

 

posted on 2009-01-29 20:13  Reunion  阅读(1626)  评论(0)    收藏  举报