BitBlt 用於從原設備中複製位圖到目標設備,語法格式如下:
BOOLBitBlt(int x,int y,int nWidth,int nHeight,CDC*pSrcDC,int xSrc,int ySrc,DWORDdwRop);
參數:
x:目標矩形區域的左上角x軸座標點。
y:目標矩形區域的左上角y軸座標點。
nWidth:在目標設備中繪製位圖的寬度。
nHight:在目標設備中繪製位圖的高度。
pSrcDC:源設備上下文對象指針。
xSrc:源設備上下文的起點x軸座標,函數從該起點複製位圖到目標設備。
ySrc:源設備上下文的起點y軸座標,函數從該起點複製位圖到目標設備。
dwRop:光柵操作代碼
dwRop有如下選擇:
BLACKNESS 使用黑色填充目標區域 DSTINVERT 目標矩陣區域顏色取反 MERGECOPY 使用與運算組合原設備矩形區域的顏色和目標設備的畫刷 MERGEPAINT 使用或運算將反向的源矩形區域的顏色和目標矩形區域的顏色合併 NOTSRCCOPY 複製源設備區域的反色到目標設備中 NOTSRCERASE 使用或運算組合源設備區域與目標設備區域的顏色,然後對結果顏色取反 PATCOPY 複製源設備當前選中的畫刷到目標設備 PATINVERT 使用異或運算組合目標設備選中的畫刷和目標設備區域的顏色 PATPAINT 通過或運算組合目標區域當前選中的畫刷和源設備區域反轉的顏色 SRCAND 使用與運算組合源設備和目標設備區域的顏色 SRCCOPY 直接複製源設備區域到目標設備中 SRCERASE 使用與運算組合目標設備區域的反色與源設備區域的顏色 SRCINVERT 使用異或運算組合源設備區域顏色和目標設備區域顏色 SRCPAINT 使用或運算組合源設備區域顏色和目標設備區域顏色 WHITENESS 使用白色填充目標區域 |
示例代碼片段:
HDC hdc,hdcbmp;
hdc=GetDC(hwnd);//獲取設備上下文句柄
hdcbmp=CreateCompatibleDC(hdc);
//HBITMAP hBitmap=LoadImage(hInst, MAKEINTRESOURCE(IDB_BLACK), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_SHARED);//這行代碼可代替下面三行代碼來加載圖片,具體可見CBitmap,HBITMAP,Bitmap的區別
CBitmap bmp;//定義位圖對象
bmp.LoadBitmap(IDB_BLACK);//加載位圖
HBITMAP hBitmap=(HBITMAP)bmp.GetSafeHandle();//獲取位圖指針
SelectObject(hdcbmp,hBitmap);//選中位圖對象
BitBlt(hdc, 0, 0, 40, 40, hdcbmp, 0, 0, SRCCOPY);
參考博文:http://blog.csdn.net/ivan_ljf/article/details/8569130,並感謝原作者
【機器博弈中的用途】:把一枚棋子畫在棋盤上
一.五子棋:直接用BitBlt函數把棋子覆蓋到棋盤上
二.象棋
(1) 把原來位置的棋子用棋盤圖案覆蓋掉(用BitBlt函數); (2) 在該位置貼上棋子的圖案,由於棋子圖案是透明的,所以要用TransparentBlt函數; (3) 如果這枚棋子是選中的,那麼再在該位置貼上選中的圖案(再用一次TransparentBlt函數)。