1.COLORREF SetDCBrushColor(HDC hdc, COLORREF crColor);
函數(shù)功能:該函數(shù)把當前設(shè)備上下文環(huán)境(DC)畫筆顏色設(shè)置為指定顏色值。如果設(shè)備不能提供指定的顏色值,那么就把顏色設(shè)為最近的物理顏色。
參數(shù):
hdc:設(shè)備上下文環(huán)境句柄。
crColor:指定新的畫筆顏色。
返回值:如果成功,返回值指定先前設(shè)備上下文環(huán)境畫筆顏色為COLORREF值;如果失敗,返回CLR_INVALID。
注釋:當在 一個設(shè)備上下文環(huán)境中選擇系統(tǒng)備用DC_BRUSH時,所有的以后繪制操作將使用設(shè)備上下文環(huán)境畫筆顏色,直到系統(tǒng)備用畫筆被取消選擇為止,缺省DC_BRUSH顏色是WHITE。
該函數(shù)將返回先前的DC_BRUSH顏色,即使在DC中沒有選擇系統(tǒng)備用畫筆DC_BRUSH,但是,除非系統(tǒng)備用DC-BRUSH被選擇,否則繪制操作將不使用它,設(shè)置顏色可參照設(shè)置筆和畫筆顏色的例子。
使用DC_BRUSH或DC_PEN參數(shù)的GetStockObject函數(shù)可以與SetDCPenColor和SetDCBrushColor函數(shù)互換。
ICM:如果ICM可用就執(zhí)行顏色管理。
2.COLORREF GetDCBrushColor(HDC hdc);
函數(shù)功能:該函數(shù)確認將要返回畫筆顏色的設(shè)備上下文環(huán)境(DC)。
參數(shù):
hdc:設(shè)備上下文環(huán)境的句柄,該設(shè)備上下文環(huán)境的畫筆顏色將被返回。
返回值:如果成功,返回值是當前Dc的畫筆顏色的顏色引用;如果失敗,返回值為CLR_INVALID。
注釋:GetDCBrushColor函數(shù)返回先前的DC_BRUSH顏色,即使系統(tǒng)備用對象DC_BRUSH沒有選入設(shè)備上下文環(huán)境。有關(guān)設(shè)置設(shè)備上下文環(huán)境畫筆顏色的更多信息,參見SetDCBrushColor。
ICM:如果ICM可用就執(zhí)行顏色管理。
3.COLORREF SetDCPenColor(HDC hdc, COLORREF crColor);
函數(shù)功能;該函數(shù)把當前設(shè)備上下文環(huán)境(DC)的筆顏色設(shè)置為指定顏色值。如果設(shè)備不能提供指定的顏色值,顏色就設(shè)為最近的物理顏色。
參數(shù):
hdc:設(shè)備上下文環(huán)境的句柄。
crColor:指定新筆顏色。
返回值:如果成功,則返回值指定先前DC筆顏色為某個COLORREF值;如果失敗,返回CLR_INVALID。
注釋:即使系統(tǒng)備用筆DC_PEN沒有被選入DC,該函數(shù)仍將返回先前DC_PEN的顏色,但是在繪制操作中這將不被使用,直到系統(tǒng)備用DC_PEN被選入DC為止。
設(shè)置顏色可以參見設(shè)置筆或畫筆顏色的例子,使用DC_BRUSH或DC_PEN參數(shù)的GetStockObject函數(shù)可與SetDCPenColor和SetDCBrushColor函數(shù)交換使用。
ICM:如果ICM可用就執(zhí)行顏色管理。詳情參見ForegroundldleProc鉤子處理過程。
4.COLORREF GetDCPenColor(HDC hdc);
函數(shù)功能:該函數(shù)設(shè)置當前DC筆顏色為指定顏色,如果設(shè)備不能提供指定顏色值,將返回最近的物理顏色。
參數(shù):
hdc:設(shè)備上下文環(huán)境的句柄,該設(shè)備上下文環(huán)境的筆顏色將被返回。
返回值:如果成功,則返回先前DC筆顏色的顏色引用;如果失敗,則返回CLR_INVALID。
注釋:即使存儲對象DC_PEN設(shè)備被選入DC,GetDCPenColor函數(shù)也將返回先前DC_PEN顏色,更多信息參見Setting the pen或Brush Color和SetDCPenColor。
ICM:如果ICM可用則執(zhí)行顏色管理。
5.HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);
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 );
函數(shù)功能:該函數(shù)選擇一對象到指定的設(shè)備上下文環(huán)境中,該新對象替換先前的相同類型的對象。
參數(shù):
hdc:設(shè)備上下文環(huán)境的句柄。
hgdiobj:被選擇的對象的句柄,該指定對象必須由如下的函數(shù)創(chuàng)建。
位圖:CreateBitmap, CreateBitmapIndirect, CreateCompatible Bitmap, CreateDIBitmap, CreateDIBsection(只有內(nèi)存設(shè)備上下文環(huán)境可選擇位圖,并且在同一時刻只能一個設(shè)備上下文環(huán)境選擇位圖)。
畫刷:CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush。
字體:CreateFont, CreateFontIndirect。
筆:CreatePen, CreatePenIndirect。
區(qū)域:CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect。
返回值:如果選擇對象不是區(qū)域并且函數(shù)執(zhí)行成功,那么返回值是被取代的對象的句柄;如果選擇對象是區(qū)域并且函數(shù)執(zhí)行成功,返回如下一值;
SIMPLEREGION:區(qū)域由單個矩形組成;COMPLEXREGION:區(qū)域由多個矩形組成。NULLREGION:區(qū)域為空。
如果發(fā)生錯誤并且選擇對象不是一個區(qū)域,那么返回值為NULL,否則返回GDI_ERROR。
注釋:該函數(shù)返回先前指定類型的選擇對象,一個應(yīng)用程序在它使用新對象進行繪制完成之后,應(yīng)該用原始的缺省的對象替換新對象。
應(yīng)用程序不能同時選擇一個位圖到多個設(shè)備上下文環(huán)境中。
ICM:如果被選擇的對象是畫筆或筆,那么就執(zhí)行顏色管理。
6.HGDIOBJ GetCurrentObject(HDC hdc, UINT uObjectType);
函數(shù)功能:該函數(shù)得到一個從特定類型中選定目標的設(shè)備對象句柄。
參數(shù):
hdc:設(shè)備上下文環(huán)境句柄。
uObjectType:指定要查詢的對象類型,該參數(shù)可取如下一值:
OBJ_PEN:筆;OBJ_BRUSH:返回當前選擇的畫筆;OBJ_PAL:返回當前選擇的調(diào)色板;
OBJ_FONT:返回當前選擇的字體;OBJ_BMAP:返回當前選擇的位圖。
返回值:如果成功,返回指定對象的句柄;如果失敗,則返回NULL。
Windows NT:若想獲得更多錯誤信息,請調(diào)用GetLastError函數(shù)。
注釋:應(yīng)用程序可以使用GetCurrentObject和GetObject函數(shù)來檢索對當前選入給定設(shè)備上下文環(huán)境的圖形對象的描述。
Windows CE:Windows CE1.0版不支持uObjectType參數(shù)的OBJ_PAL標志值,在WindowsCE2.0版中,該函數(shù)與在Windows桌面平臺完全相同。
7.int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);
函數(shù)功能:該函數(shù)得到指定圖形對象的信息,根據(jù)圖形對象,函數(shù)把填滿的或結(jié)構(gòu),或表項(用于邏輯調(diào)色板)數(shù)目放入一個指定的緩沖區(qū)。
參數(shù):
hgdiobj:指向感興趣的圖形對象的句柄,它可以是這樣的一個句柄:一個邏輯位圖、一個刷子、一種字體、一個調(diào)色板、筆或通過調(diào)用CreateDIBsection函數(shù)創(chuàng)建的與設(shè)備無關(guān)位圖。
cbBuffer:指定將要寫到緩沖區(qū)的信息的字節(jié)數(shù)目。
lpvObject:指向一個緩沖區(qū)的指針,該緩沖區(qū)將要檢索指定圖形對象的信息。
下面列出的是緩沖區(qū)為每種圖形對象類型可接收的信息和類型,可用hgdiobj來指定,寫入*lpvObject: HBITMAP BITMAP。
HBITMAP:如果cbBuffer被設(shè)置為sizeof(DIBSECTION)或sizeof(BITMAP),則從對CreatDIBSection函數(shù)的DIBSECTION調(diào)用中返回。
HPALETTE:邏輯調(diào)色板入口數(shù)的WORD數(shù)目。
HPEN:從對ExtCreatePen函數(shù)的LXTLOGPEN調(diào)用中返回。
HPENLOGPEN; HBRUSH LOGBRUSH; HFONT LOGFONT
如果lpvObject參數(shù)為Null,則函數(shù)返回值為指定圖形對象需要把信息貯存到緩沖區(qū)的字節(jié)數(shù)目。
返回值:如果函數(shù)調(diào)用成功,且lpvObject為一個有效指針,則返回值為貯存到緩沖區(qū)的字節(jié)數(shù)目;如果函數(shù)調(diào)用成功,且lprObject為Null,則返回值為需要容納的貯存到緩沖區(qū)的信息字節(jié)數(shù)目;如果函數(shù)調(diào)用失敗,則返回值為0。
Windows NT:若想獲得更多錯誤信息,可調(diào)用GetLastError函數(shù)。
注釋:lpvObject參數(shù)指向的緩沖區(qū)一定要足夠大以接收圖形對象的信息。
如果hgdiobj標識一個由調(diào)用CreateDIBSection創(chuàng)建的位圖,且指定的緩沖區(qū)足夠大,則GetObject函數(shù)返回一個DIBSECTION結(jié)構(gòu)。另外,DIBSECTION中的BITMAP結(jié)構(gòu)中的bmBits元素含有一個指向位圖位值的指針。
如果hgdiobj標識了一個通過其他途徑創(chuàng)建的位圖,則GetObject只返回位圖的寬、高和顏色格式信息,通過調(diào)用GetDIBits或GetBitmapBits函數(shù)可以得到位置的位值。
如果hgdiobj標識了一個邏輯調(diào)色板,則GetObject檢索一個2字節(jié)的整數(shù),該整數(shù)指定調(diào)色板中的項數(shù),函數(shù)不檢索定義調(diào)色板的LOGPALETTE結(jié)構(gòu),為檢索有關(guān)調(diào)色板項的信息,應(yīng)用程序可以調(diào)用GetPaletteEntries函數(shù)。
Windows CE:在Windows CE 1.0中,當用在DIB上中,GetObject總返回一個BITMAP。Windows CE 1.0不支持lpvObject參數(shù)的HPALETTE值。此函數(shù)在Windows CE 2.0與在Windows桌面上一樣。
HFONT hFont,hTempFont,hOldFont;
LOGFONT lf;
HDC hDC;
hDC=GetDC(hWnd);
TextOut(hDC,10,10,"Using Default Font",18);
hFont=(HFONT)GetCurrentObject(hDC,OBJ_FONT);
GetObject(hFont,sizeof(lf),&lf);
//改變當前字體的一些特性
lf.lfEscapement=900;
lf.lfOrientation=900;
lf.lfWeight=900;
//生成一個新字體,并把它選入DC中
hTempFont=CreateFontIndirect(&lf);
hOldFont=(HFONT)SelectObject(hDC,hTempFont);
TextOut(hDC,10,30,"Using New Font",14);
SelectObject(hDC,hOldFont);
ReleaseDC(hWnd,hDC);
8.HGDIOBJ GetStockObject(int fnObject);
函數(shù)功能:該函數(shù)檢索預(yù)定義的備用筆、刷子、字體或者調(diào)色板的句柄。
參數(shù):
fnObject:指定對象的類型,該參數(shù)可取如下值之一;
BLACK_BRUSH:黑色畫筆;DKGRAY_BRUSH:暗灰色畫筆;DC_BRUSH:在Windows98,Windows NT 5.0和以后版本中為純顏色畫筆,缺省色為白色,可以用SetDCBrushColor函數(shù)改變顏色,更多的信息參見以下的注釋部分。GRAY_BRUSH:灰色畫筆;HOLLOW_BRUSH:空畫筆(相當于HOLLOW_BRUSH);
LTGRAY_BRUSH:亮灰色畫筆;NULL_BRUSH:空畫筆(相當于HOLLOW_BRUSH);
WHITE_BRUSH:白色畫筆;BLACK_PEN:黑色鋼筆;
DC_PEN:在Windows98、Windows NT 5.0和以后版本中為純色鋼筆,缺省色為白色,使用SetDCPenColor函數(shù)可以改變色彩,更多的信息,參見下面的注釋部分。
WHITE_PEN:白色鋼筆;ANSI_FIXED_FONT:在Windows中為固定間距(等寬)系統(tǒng)字體;
ANSI_VAR_FONT:在Windows中為變間距(比例間距)系統(tǒng)字體;
DEVICE_DEFAUCT_FONT:在WindowsNT中為設(shè)備相關(guān)字體;
DEFAULT_GUI_FONT:用戶界面對象缺省字體,如菜單和對話框;
OEM_FIXED_FONT:原始設(shè)備制造商(OEM)相關(guān)固定間距(等寬)字體;
SYSTEM_FONT:系統(tǒng)字體,在缺省情況下,系統(tǒng)使用系統(tǒng)字體繪制菜單,對話框控制和文本;
SYSTEM_FIXED_FONT:固定間距(等寬)系統(tǒng)字體,該對象僅提供給兼容16位Windows版本;
DEFAULT_PALETTE:缺省調(diào)色板,該調(diào)色板由系統(tǒng)調(diào)色板中的靜態(tài)色彩組成。
返回值:如果成功,返回值標識申請的邏輯對象,如果失敗,返回值為NULL。
WindowsNT:若想獲得更多錯誤信息,請調(diào)用GetLastError函數(shù)。
注釋:僅在CS_HREDRAW和CS_UREDRAW風格的窗口中使用DKGRAY_BRUSH、GRAY_BRUSH和LTGRAY_BRUSH對象。
如果在其他風格的窗口中使灰色畫筆,可能導(dǎo)致在窗口移動或改變大小之后出現(xiàn)畫筆模式錯位現(xiàn)象,原始儲存畫筆不能被調(diào)整。
HOLLOW_BRUSH和NULL_BRUSH儲存對象相等。
由DEFAULT_GUI_FONT儲存對象使用的字體將改變。當想使用菜單、對話框和其他用戶界面對象使用的字體時請使用此儲存對象。
不必要通過調(diào)用DeleteObject函數(shù)來刪除儲存對象。
Windows 98、Windows NT 5.0和以后版本:DC_BRUSH和DC_PEN都能與其他儲存對象如BLACK_BRUSH和BLACK_PEN相互交換關(guān)于檢索當前鋼筆和畫筆顏色的信息,請參見GetDCBrushColor和GetDCPencolor,帶DC BRUSH或DC PEN參數(shù)的Getstockobject函數(shù)可以與SetDCPenColor和SetDCBrushColor函數(shù)相互交換使用。
Windows CE:Windows CE不支持fnObject參數(shù)的如下值:
ANSI_FIXED_FONT、ANSI_VAR_FONT、OEM_FIXED_FONT、SYSTEM_FIXED_FONT
Windows CE1.0版本不支持fnObject的DEFAULT_PALETTE值。
9.DWORD GetObjectType(HGDIOBJ h);
函數(shù)功能:該函數(shù)確定指定對象的類型。
參數(shù):
h:圖形對象的句柄。
返回值:如果成功,返回值標識該對象,它可取如下值:
OBJ_BITMAP:位圖(Bitmap);OBJ_BRUSH:畫筆(Brush);OBJ_FONT:字體(Font);OBJ_PAL:調(diào)色板(palette);
OBJ_EXTPEN:擴展筆(Extendedpen);OBJ_REGION:區(qū)域(Region);OBJ_DC:設(shè)備上下文環(huán)境(Devicecontext);
OBJ_MEMDC:存設(shè)備上下文環(huán)境;OBJ_METAFILE:圖元文件;OBJ_ENHMETAFILE:增強圖元文件;
OBJ_ENHMETADC:增強圖元文件設(shè)備上下文環(huán)境;
如果失敗,返回值為零,若想獲得更多錯誤信息,請調(diào)用GetLastError函數(shù)。
Windows CE:Windows CE不支持下列返回值:
OBJ_EXTPEN;OBJ_METADC;OBJ_METAFILE;OBJ_ENHMETAFILE;OBJ-ENHMETADC
Windows CE 1.0版不支持OBJ_PAL返回值。
HGDIOBJ hGdi;
//獲取庫存的黑灰色畫刷
hGdi=GetStockObject(DKGRAY_BRUSH);
if(GetObjectType(hGdi)==OBJ_BRUSH)
MessageBox(NULL,"OBJ_BRUSH IS BRUSH","OK",MB_OK);