BitBltは、指定されたコピー元デバイスコンテキストから、指定されたコピー先デバイスコンテキストにピクセル列を転送するWindowsAPI・・・。
これを使って、ようやくLoadImageでロードした画像を描画できるのだが、みてわかるとおりhBitmapを指定する場所は無い・・・。
ビットマップはhBitmapで直接描画できるわけではなく、SelectObjectでhBitmapを選択したメモリデバイスコンテキストhMemDCをコピー元にして、コピー先にピクセル列を転送することで、間接的に描画が可能になる・・・。
(ペンやブラシをデバイスコンテキストに選択させたように、ビットマップというハンコを選択したような感じ・・・。でそのハンコを押すためにはBitBltを使う・・・。)
"test.bmp"を描画してみよう・・・。
WM_CREATEで、
LoadImageで"test.bmp"をロードして、hBitmapを保持しておく・・・。
WM_PAINTで、
CreateCompatibleDCでウィンドウの物理デバイスコンテキストhDCを元にメモリデバイスコンテキストhMemDCを作っておく・・・。
SelectObjectで、hMemDCにhBitmapを選択させる・・・。これでhMemDCとhBitmapが紐付いたので、
BitBltでhMemDCのピクセル列( = ビットマップhBitmapのピクセル列)をhDCに転送する・・・。
コピー先の始点(0, 0)で、幅640, 高さ480, コピー元の始点も(0, 0), SRCCOPYはそのままコピー転送という意味・・・。
終わったら、元に戻してhMemDCは破棄・・・。
もちろんWM_DESTROYの時には、hBitmapも破棄する・・・。
実行すると、
"test.bmp"が描画された・・・。