接着练![]()
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);//将指定对象的信息写入到缓冲区
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);
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();
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();
浙公网安备 33010602011771号