MFC の transparentblt 関数の使用方法
MFCではCImageクラスでTransparentBlt関数が提供され、透過ビットマップの描画を行う。TransparentBlt関数のプロトタイプは以下の通り。
BOOL TransparentBlt(
HDC hdcDest, // 目标设备上下文句柄
int xDest, // 目标矩形左上角的x坐标
int yDest, // 目标矩形左上角的y坐标
int nDestWidth, // 目标矩形的宽度
int nDestHeight, // 目标矩形的高度
HDC hdcSrc, // 源设备上下文句柄
int xSrc, // 源矩形左上角的x坐标
int ySrc, // 源矩形左上角的y坐标
int nSrcWidth, // 源矩形的宽度
int nSrcHeight, // 源矩形的高度
UINT crTransparent // 透明颜色
);
引数について
- ターゲット デバイスの描写先の装置コンテキストであり、ターゲット デバイスの描写先の装置コンテキストを表しています。
- nDest、yDest:ターゲットとなる矩形の左上の座標で、ターゲットデバイス上の描画対象エリアの位置を表します。
- nDestWidth, nDestHeight:目標の長方形の幅と高さを表すため、描画する側の領域のサイズです。
- hdcSrcは元デバイスの文脈ハンドルで、描画するソースビットマップのデバイスコンテキストを表します。
- nSrc、ySrc:ソース矩形左上の座標であり、描画したいソースビットマップ内領域の位置の開始を表します。
- nSrcWidth、nSrcHeight:描画したい領域のサイズを表す、元の矩形の幅と高さ。
- 透過色 : ソース画像で透過させたい色を表す
例の使用法:
// 创建目标设备上下文
HDC hdcDest = ::GetDC(m_hWnd);
// 创建源设备上下文
HDC hdcSrc = ::CreateCompatibleDC(hdcDest);
// 加载源位图
CImage imgSrc;
imgSrc.Load(_T("source.bmp"));
// 将源位图选入源设备上下文
HBITMAP hBmpOld = (HBITMAP)::SelectObject(hdcSrc, imgSrc);
// 绘制透明位图
TransparentBlt(hdcDest, 0, 0, nDestWidth, nDestHeight, hdcSrc, xSrc, ySrc, nSrcWidth, nSrcHeight, crTransparent);
// 恢复源设备上下文
::SelectObject(hdcSrc, hBmpOld);
// 释放源设备上下文
::DeleteDC(hdcSrc);
// 释放目标设备上下文
::ReleaseDC(m_hWnd, hdcDest);
透明なビットマップは、crTransparent パラメーターを指定することで実現できます。このパラメーターは、ソースのビットマップで透明にしたい色を表します。実際の使用では、ソースのビットマップの具体的な状況に応じて、透明色の値を決定する必要があります。