c++ GDI 中SelectObject使用方法和注意事項


介紹

CPen* SelectObject( CPen* pPen );
CBrush* SelectObject( CBrush* pBrush );
virtual CFont* SelectObject( CFont* pFont );
CBitmap* SelectObject( CBitmap* pBitmap );
int SelectObject( CRgn* pRgn );
CGdiObject* SelectObject( CGdiObject* pObject );
函數功能:該函數選擇一對象到指定的 設備上下文環境中,該新對象替換先前的相同類型的對象。
函數原型:HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);
參數:
hdc: 設備上下文環境的句柄。
hgdiobj:被選擇的對象的句柄,該指定對象必須由如下的函數創建。
位圖:CreateBitmap, CreateBitmapIndirect, CreateCompatible Bitmap,  CreateDIBitmap, CreateDIBsection(只有內存 設備上下文環境可選擇位圖,並且在同一時刻只能一個設備上下文環境選擇位圖)。
畫刷: CreateBrushIndirectCreateDIBPatternBrushCreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush。
字體:CreateFont, CreateFontIndirect。
筆:CreatePen, CreatePenIndirect。
返回值:如果選擇對象不是區域並且函數執行成功,那么返回值是被取代的對象的句柄;如果選擇對象是區域並且函數執行成功,返回如下一值;
SIMPLEREGION:區域由單個矩形組成;COMPLEXREGION:區域由多個矩形組成。NULLREGION:區域為空。
如果發生錯誤並且選擇對象不是一個區域,那么返回值為NULL,否則返回GDI_ERROR。
注釋:該函數返回先前指定類型的選擇對象,一個 應用程序在它使用新對象進行繪制完成之后,應該用原始的缺省的對象替換新對象。
應用程序不能同時選擇一個位圖到多個 設備上下文環境中。
ICM:如果被選擇的對象是 畫筆或筆,那么就執行顏色管理。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;頭文件:wingdi.h;庫文件:gdi32.lib。

編輯本段示例

HDC hdc=GetDC(hwnd);
HDC memdc=CreateCompatibleDC(hdc);
RECT rc;
BITMAP bmp;
HBITMAP holdbmp,hbmp=LoadBitmap(hInstDVBRes,MAKEINTRESOURCE(IDB_CLOCK));//從資源加載位圖
holdbmp=(HBITMAP)SelectObject(memdc,hbmp);//這里把hbmp的 位圖選擇到兼容DC memdc,之后這個兼容DC就擁有和
//hbmp同樣大小的繪圖區域,注意超出位圖返回的GDI輸出都是無效的.
GetObject(hbmp,sizeof(BITMAP),&bmp);//這里獲取 位圖的大小信息,事實上也是兼容DC繪圖輸出的范圍
SetRect(&rc,0,0,bmp.bmWidth,bmp.bmHeight);
DrawText(memdc,"Center Line Text" -1,&rc,DT_VCENTER|DT_SINGLELINE|DT_CENTER);//在兼容DC中間位置輸出字符串
//這樣以來我們就相當於把hbmp這個 位圖加上了文字標注,我們可以把這個增加了文字標注的位圖保存起來.一個簡單的圖像處理基本就OK了.
SelectObject(memdc,holdbmp);//復原兼容DC數據.
DeleteDC(memdc);

 

 參考:新編Windows API參考大全


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM