GetObject() SelectObject()

GetObject函數用於從指定的圖形對象中獲取信息,原型如下:

int GetObject(
  HGDIOBJ hgdiobj,  // handle to graphics object
  int cbBuffer,     // size of buffer for object information
  LPVOID lpvObject  // buffer for object information
);

  

其中

參數hgdiobj是圖形對象的句柄,圖形對象可以是如下幾種:邏輯位圖、刷子、字體、調色板、畫筆或者由函數CreateDIBSection創建的設備無關位圖;

參數cbBuffer是即將寫入到緩衝區中的圖形對象信息的字節數;

參數lpvObject是指向接收圖形對象信息的緩衝區的指針,下表是每一種圖形對象對應獲取到的緩衝區中的信息;

關於返回值:

  1. 當函數執行成功且參數lpvObject爲NULL時,返回值是保存獲取的信息的緩衝區需要的字節數;
  2. 當函數執行成功且參數lpvObject是有效地指針時,返回值是存儲到緩衝區中的數據的字節數;
  3. 當函數執行失敗時,返回值是0。

 

		GetObject(hBitmap,sizeof(BITMAP),&Bitmap);

		cxSource=Bitmap.bmWidth;       

		cySource=Bitmap.bmHeight;








函數簡介編輯

函數功能:該函數得到指定圖形對象的信息,根據圖形對象,函數把填滿的或結構,或表項(用於邏輯調色板)數目放入一個指定的緩衝區。
函數原型: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只返回位圖的寬、高和顏色格式信息,通過調用GetDIBitsGetBitmapBits函數可以得到位置的位值。
如果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兩種版本。
















SelectObject()函數詳解

SelectObject 
把一個對象(位圖、畫筆、畫刷等)選入指定的設備描述表。新的對象代替同一類型的老對象。 

HGDIOBJ SelectObject(
  HDC hdc,          // handle to DC
  HGDIOBJ hgdiobj   // handle to object
);

 

參數 

  1. hdc 設備描述表句柄(要載入的設備描述表句柄)
  2. hgdiobj 選擇要載入的對象的句柄

但該對象的句柄必須使用以下函數創建纔有效:

Bitmap(位圖)          CreateBitmap, CreateBitmapIndirect, 
                            CreateCompatibleBitmap, CreateDIBitmap, 
                            CreateDIBSection 
Brush(畫刷)           CreateBrushIndirect, eateDIBPatternBrush,  
                            CreateDIBPatternBrushPt, CreateHatchBrush,  
                            CreatePatternBrush, CreateSolidBrush 
Font(字體)              CreateFont, CreateFontIndirect 


Pen(畫筆)               CreatePen, CreatePenIndirect 


Region(區域)             CombineRgn, CreateEllipticRgn,  
                               CreateEllipticRgnIndirect,  
                               CreatePolygonRgn, CreateRectRgn,  
                               CreateRectRgnIndirect 

返回值:如果選擇對象不是區域並且函數執行成功,那麼返回值是被取代的對象的句柄;如果選擇對象是區域並且函數執行成功,返回如下一值;
 

發佈了115 篇原創文章 · 獲贊 17 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章