在WIN32中,將位元影像顯示在視窗上的步驟有一些複雜
它不是將位元影像像線條一樣直接畫在視窗上的,而是通過記憶體控制代碼調用顯示在視窗上的
如果要在表單上顯示位元影像,首先要把位元影像調入資源檢視中
載入位元影像資源:將資源檢視中的位元影像載入進來
static HBITMAP hBitMap; //位元影像控制代碼static BITMAP BitMap; //位元影像結構體
其中位元影像結構體定義如下:
typedef struct tagBITMAP { LONG bmType; //位元影像類型 LONG bmWidth; //位元影像寬度 LONG bmHeight; //位元影像高度 LONG bmWidthBytes; //寬度所佔位元組 WORD bmPlanes; WORD bmBitsPixel; //像素 LPVOID bmBits; } BITMAP, *PBITMAP, NEAR *NPBITMAP, FAR *LPBITMAP;
載入位元影像:在視窗建立的時候進行載入
case WM_CREATE:{hBitMap = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_FUTURE)); //得到位元影像控制代碼GetObject(hBitMap, sizeof(BITMAP), &BitMap); //將位元影像控制代碼傳給位元影像結構體//擷取位元影像的寬度和高度cxBitMap = BitMap.bmWidth;cyBitMap = BitMap.bmHeight;}break;
建立記憶體環境裝置:
位元影像和視窗一樣,專門需要一個控制代碼,用來存放位元影像,稱為位元影像記憶體DC
HDC hdcMem; //位元影像的記憶體DC
將位元影像選入記憶體DC,用於在表單上繪製
SelectObject(hdcMem, hBitMap); //將位元影像選入記憶體DC
使用BitBlt()函數進行繪製
//把記憶體DC中的位元影像拷貝到視窗DC中顯示BitBlt(hdc, 200, 200, cxBitMap, cyBitMap, hdcMem,0,0,SRCCOPY); //用拷貝的方式執行
參數說明:hdc是視窗控制代碼
200,200表示繪製的視窗起始座標(就是從視窗的哪裡開始繪製)
cxBitMap和cyBitMap為位元影像的大小,
0,0表示位元影像上的一個座標,程式將從該座標開始進行繪製
SRCCOPY表示用拷貝的方式執行操作
效果: