BOOL BitBlt( HDC hDestDC, int nDestLeft, int nDestTop, int nWidth, int nHeight, HDC hSrcDC, int nSrcLeft, int nSrcTop, DWORD dwRop);
Declare Function BitBlt Lib "gdi32" ( _ ByVal hDestDC As Long, _ ByVal nDestLeft As Long, _ ByVal nDestTop As Long, _ ByVal nWidth As Long, _ ByVal nHeight As Long, _ ByVal hSrcDC As Long, _ ByVal nSrcLeft As Long, _ ByVal nSrcTop As Long, _ ByVal dwRop As Long) As Long
dwRopにラスタオペレーションコードを渡すことにより、単純な上書き、転送元イメージと転送先イメージの重ねあわせなど、描画方法を指定することができる。
よく使用されるラスタオペレーションコードには、以下のようなものがある。
| SRCCOPY | 単純な上書き。 |
| SRCAND | 転送元と転送先の色のANDをとる。 |
| SRCPAINT | 転送元と転送先の色のORをとる。 |
大抵のグラフィックデバイスは、BitBltが可能である。しかし、プロッタなど、一部のグラフィックデバイスは、実行に失敗する可能性がある。デバイスがBitBltをサポートしているかどうかは、GetDeviceCaps関数で知ることができる。具体的には、RASTERCAPSを問い合わせ、結果の値にRC_BITBLTビットがセットされているかどうか調べる。
描画位置などを表す数値は、論理単位である。デバイスに対してSetMapModeを行うことにより、単位はピクセルであったり、インチであったりする。ただしVBにおいては、ピクチャボックスなどに存在するScaleModeプロパティとは無関係であり、通常ピクセル単位となる。
転送元グラフィックデバイスが、SetWorldTransform関数によって回転または傾斜の変換を行うように設定されている場合、BitBltは失敗する。
引数の意味は、以下の通り。
| hDestDC | 転送先グラフィックデバイスを表すデバイスコンテキストハンドル |
| nDestLeft | 転送先グラフィックデバイス上の、イメージの転送先位置の論理X座標成分。 |
| nDestTop | 転送先グラフィックデバイス上の、イメージの転送先位置の論理Y座標成分。 |
| nWidth | イメージの横幅の論理長。 |
| nHeight | イメージの高さの論理長。 |
| hSrcDC | 転送元グラフィックデバイスを表すデバイスコンテキストハンドル。 |
| nSrcLeft | 転送元グラフィックデバイス上の、転送元イメージの位置の論理X座標成分。 |
| nSrcTop | 転送元グラフィックデバイス上の、転送元イメージの位置の論理y座標成分。 |
| dwRop | ラスタオペレーションコード。 |
戻り値は、関数の実行が成功したか否かを表す真偽値である。
主なエラーは、以下の通り。
| ERROR_INVALID_HANDLE | デバイスコンテキストハンドルが不正。 |
/*
* 指定されたウィンドウに、ディスプレイ上の左上のイメージを描画する
* 引数:
* hWnd: 描画先ウィンドウを示すウィンドウハンドル
*/
void DoBitBlt(HWND hWnd)
{
HDC hSrcDC;
HDC hDestDC;
/* デバイスコンテキストハンドルの取得 */
hSrcDC = GetDC(NULL); /* ディスプレイのデバイスコンテキストハンドル取得 */
hDestDC = GetDC(hWnd); /* 指定されたウィンドウのデバイスコンテキストハンドル取得 */
/* 描画 */
BitBlt(
hDestDC,
0, 0, 100, 100,
hSrcDC,
0, 0,
SRCCOPY);
/* デバイスコンテキストハンドルの開放 */
ReleaseDC(hWnd, hDestDC);
ReleaseDC(hWnd, hSrcDC);
}
' ピクチャボックスPicture1に表示されているイメージの一部をピクチャボックスPicture2に描画する。 Private Sub Command1_Click() BitBlt _ Picture2.hDC, _ 0, 0, 100, 100, _ Picture1.hDC, _ 0, 0, _ SRCCOPY End Sub