GetObject函數用于從指定的圖形對象中擷取資訊,原型如下:
int GetObject(
__in HGDIOBJ hgdiobj,
__in int cbBuffer,
__out LPVOID lpvObject
);
其中
(1)參數hgdiobj是圖形對象的句柄,圖形對象可以是如下幾種:邏輯位圖、刷子、字型、調色闆、畫筆或者由函數CreateDIBSection建立的裝置無關位圖;
(2)參數cbBuffer是即将寫入到緩沖區中的圖形對象資訊的位元組數;
(3)參數lpvObject是指向接收圖形對象資訊的緩沖區的指針,下表是每一種圖形對象對應擷取到的緩沖區中的資訊:
傳回值:
當函數執行成功且參數lpvObject為NULL時,傳回值是儲存擷取的資訊的緩沖區需要的位元組數;
當函數執行成功且參數lpvObject是有效地指針時,傳回值是存儲到緩沖區中的資料的位元組數;
當函數執行失敗時,傳回值是0。
執行個體代碼如下,使用GetObject函數擷取指定位圖的大小:
/********************************************************************
* 擷取指定位圖的寬和高
********************************************************************/
inline void GetBitmapSize(HBITMAP hBitmap, int& nWidth, int& nHeight)
{
BITMAP bm;
::GetObject(hBitmap, sizeof(BITMAP), (PSTR)&bm);
nWidth = bm.bmWidth;
nHeight = bm.bmHeight;
}
GradientFill函數用于填充矩形和三角形結構,原型如下:
BOOL GradientFill(
__in HDC hdc,
__in PTRIVERTEX pVertex,
__in ULONG nVertex,
__in PVOID pMesh,
__in ULONG nMesh,
__in ULONG ulMode
);
其中
(1)參數hdc是目标裝置上下文的句柄;
(2)參數pVertex是指向存儲TRIVERTEX結構資料的數組;
(3)參數nVertex是數組pVertex中的頂點數;
(4)參數pMesh在三角形模式中表示存儲GRADIENT_TRIANGLE結構資料的數組;在矩形模式中表示存儲GRADIENT_RECT結構資料的數組;
(5)參數nMesh是pMesh數組中元素的個數;
(6)參數ulMode指定漸變填充模式,取值如下:
傳回值:
函數執行成功時傳回TRUE;失敗時傳回FALSE;
上面函數中使用到了幾個結構,下面分别介紹:
1)TRIVERTEX結構包含了顔色資訊和位置資訊,原型如下:
typedef struct _TRIVERTEX {
LONG x; //邏輯機關下矩形左上角的x坐标
Long y; //邏輯機關下矩形左上角的y坐标
COLOR16 Red; //上述點的顔色資訊
COLOR16 Green;
COLOR16 Blue;
COLOR16 Alpha;
} TRIVERTEX, *PTRIVERTEX;
2)GRADIENT_RECT結構指定了函數GradientFill中參數pVertex數組中的兩個點的索引,這兩個點分别是一個矩形的左上角和右下角點,結構原型如下:
typedef struct _GRADIENT_RECT {
ULONG UpperLeft; //矩形左上角
ULONG LowerRight; //矩形右下角
} GRADIENT_RECT, *PGRADIENT_RECT;
3)GRADIENT_TRIANGLE結構指定了函數GradientFill函數中pVertex數組中的三個點的索引,這三個點組成一個三角形,結構原型如下: