1. ホーム
  2. c++

[解決済み] CreateCompatibleBitmap() は黒い HBITMAP を返します。

2022-02-12 08:56:26

質問

Stack Overflowのユーザーの皆様、こんにちは。以下のコードで、CreateCompatibleBitmap()を正しく使用していないようです。

#include <windows.h>
using namespace std;
int main() {HDC hdc=GetDC(HWND_DESKTOP); HDC MemDC=CreateCompatibleDC(hdc);
    HBITMAP hBit=CreateCompatibleBitmap(hdc,1366,768);
    SelectObject(MemDC,hBit);
    BitBlt(hdc,0,0,1366,768,MemDC,0,0,SRCCOPY); //Screen turns black
    DeleteObject(hBit);
    ReleaseDC(HWND_DESKTOP,hdc);
    ReleaseDC(NULL,MemDC);
    DeleteDC(MemDC);
    DeleteDC(hdc);
}

CreateCompatibleBitmap()はDesktop DCの1366x768の部分を返すものと思っていましたが、BitBlt()の後に黒い画面が表示されます。CreateCompatibleBitmapの代わりにビットマップファイルをhBitに読み込むと全て思い通りになるので、CreateCompatibleBitmap()のみに問題があると思われます。この関数は正しく使用されていますか?何か私がやっていないことで、やるべきことがあるのでしょうか?

解決方法は?

CreateCompatibleBitmap はビットマップを作成しましたが、デスクトップの一部などでは初期化されないはずです。初期化せずにデスクトップにブライトしているので、黒くなることは想定外のことではありません。デスクトップ画像を保持させたい場合は、作成したビットマップを選択した状態で、デスクトップDCからDCへ逆方向のブライトを行う必要があります。