複製鏈接
請複製以下鏈接發送給好友

SetBkMode

鎖定
SetBkMode,Windows API,設置指定DC的背景混合模式,背景混合模式用於與文本,填充畫刷和當畫筆不是實線時。
中文名
SetBkMode
外文名
SetBkMode
聲明位置
WinGDI.h
靜態庫
Gdi32.lib
動態庫
Gdi32.dll

SetBkMode函數功能

設置指定DC的背景混合模式,背景混合模式用於與文本,填充畫刷和當畫筆不是實線時。 [1] 

SetBkMode函數原型

//Windows API 中的函數原型
int SetBkMode(
  _In_ HDC hdc,
  _In_ int iBkMode
);
//MFC 中封裝的函數原型
int CDC::SetBkMode(int mode);

SetBkMode參數

HDC hdc; //當前 DC ( device context ) 的句柄
int mode; //要設置的模式,其值可以為 OPAQUE 或 TRANSPARENT

SetBkMode返回值

如果函數運行成功,返回當前DC之前的背景模式;如果函數運行失敗,返回零。 [1] 

SetBkMode實例

void OnPaint(HDC hdc)
{
    int mode = SetBkMode(hdc, TRANSPARENT);//設置為透明模式
    RECT rect = { 0, 0, 200, 50 };
    //在矩形中心繪製文字
    DrawText(hdc, _T("Hello World"), -1, &rect, DT_VCENTER | DT_CENTER | DT_SINGLELINE);
    SetBkMode(hdc, mode);//還原為之前的模式, 這裏不是必須的
}

SetBkMode説明

輸出的字符串時,發現輸出字符串的背景色不同於控件的顏色,這樣的輸出是破壞背景的。那需要使用什麼方法來保持背景不變,而又能輸出紅色的字符串呢?比如按鈕的文字顏色是黑色的,而背景是灰色的。這就需要使用SetBkMode函數來設置DrawText函數的輸出方式,顯示設備共有兩種輸出方式:OPAQUE和TRANSPARENT。OPAQUE的方式是用當前背景的畫刷的顏色輸出顯示文字的背景,而TRANSPARENT是使用透明的輸出,也就是文字的背景是不改變的。
對透明的理解:在窗體或控件輸出的字符串或圖形是有背景色的。而窗體或控件也是有背景色的。這兩種背景色一般是不同的, 這樣輸出圖形或字符串時,兩種背景(窗體或控件的背景色、符串或圖形的背景色)重疊在一起了,影響美觀,為了不讓這兩種背景重疊,可以設置背景模式為TRANSPARENT(透明的),即讓輸出的字符串或圖形的背景色不可見。可以這樣理解:把輸出的字符串或圖形的背景色看成是一物體,窗體或控件看成另一物體,字符串或圖形在窗體或控件前面擋住窗體或控件了(因為輸出 的字符串或圖形是畫在窗體或控件上的,所以可以這麼類比),但是透過字符串或圖形能看到窗體或控件。即字符串或圖形的背 景色所代表的物體是透明的。

SetBkMode相關函數

參考資料