函式簡介
函式功能:GetObject函式得到指定圖形對象的信息,根據圖形對象,函式把填滿的或結構,或表項(用於邏輯調色板)數目放入一個指定的緩衝區。
函式原型:int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);
參數:
hgdiobj:指向感興趣的圖形對象的句柄,它可以是這樣的一個句柄:一個邏輯點陣圖、一個刷子、一種字型、一個調色板、筆或通過調用CreateDIBSection函式創建的與設備無關點陣圖。
cbBuffer:指定將要寫到緩衝區的信息的位元組數目。
lpvObject:指向一個緩衝區的指針,該緩衝區將要檢索指定圖形對象的信息。
下面列出的是緩衝區為每種圖形對象類型可接收的信息和類型,可用hgdiobj來指定,寫入*lpvObject: HBITMAP BITMAP。
HBITMAP:如果cbBuffer被設定為sizeof(DIBSECTION)或sizeof(BITMAP),則從對CreatDIBSection函式的DIBSECTION調用中返回。
HPALETTE:邏輯調色板入口數的WORD數目。
HPEN:從對ExtCreatePen函式的LXTLOGPEN調用中返回。
HPENLOGPEN; HBRUSH LOGBRUSH; HFONT LOGFONT
如果lpvObject參數為Null,則函式返回值為指定圖形對象需要把信息貯存到緩衝區的位元組數目。
返回值:如果函式調用成功,且lpvObject為一個有效指針,則返回值為貯存到緩衝區的位元組數目;如果函式調用成功,且lprObject為Null,則返回值為需要容納的貯存到緩衝區的信息位元組數目;如果函式調用失敗,則返回值為0。
Windows NT:若想獲得更多錯誤信息,可調用GetLastError函式。
注釋:lpvObject參數指向的緩衝區一定要足夠大以接收圖形對象的信息。
如果hgdiobj標識一個由調用CreateDIBSection創建的點陣圖,且指定的緩衝區足夠大,則GetObject函式返回一個DIBSECTION結構。另外,DIBSECTION中的BITMAP結構中的bmBits元素含有一個指向點陣圖位值的指針。
如果hgdiobj標識了一個通過其他途徑創建的點陣圖,則GetObject只返回點陣圖的寬、高和顏色格式信息,通過調用GetDIBits或GetBitmapBits函式可以得到位置的位值。
如果hgdiobj標識了一個邏輯調色板,則GetObject檢索一個2位元組的整數,該整數指定調色板中的項數,函式不檢索定義調色板的LOGPALETTE結構,為檢索有關調色板項的信息,應用程式可以調用GetPaletteEntries函式。
Windows CE:在Windows CE 1.0中,當用在DIB上中,GetObject總返回一個BITMAP。Windows CE 1.0不支持lpvObject參數的HPALETTE值。此函式在Windows CE 2.0與在Windows桌面上一樣。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;頭檔案:wingdi.h;庫檔案:gdi32.lib;Unicode:在Windows NT上實現為Unicode和ANSI兩種版本。
程式示例
下面是在應用程式中獲取點陣圖檔案*.bmp的大小信息的核心代碼:
HBITMAP hBitmapImag;
BITMAP bitmap ;
int nWidth, nHeight;
hBitmapImag = LoadBitmap (hInstance, TEXT ("D:\\photos\\Matthew.bmp")) ;
GetObject (hBitmapImag, sizeof (BITMAP), &bitmap) ;
nWidth = bitmap.bmWidth;
nHeight = bitmap.bmHeight;
///////////////
// your code
///////////////
DeleteObject (hBitmapImag);