1

スタック オーバーフロー ユーザーの皆様、こんにちは。次のコードで 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() はデスクトップ DC の 1366x768 セクションを返すと思っていましたが、BitBlt() の後に黒い画面が表示されます。CreateCompatibleBitmap を使用する代わりに、ビットマップ ファイルを hBit にロードすると、すべてが希望どおりになるため、問題は CreateCompatibleBitmap() のみにあると思います。この機能を正しく使用していますか? 私がしなければならないのに、私がしていないことはありますか?

4

1 に答える 1

6

CreateCompatibleBitmapビットマップを作成しましたが、デスクトップの一部などで初期化することは想定されていません。初期化せずにデスクトップにブリットするため、黒さは予想外のものではありません。デスクトップ イメージを保持する場合は、作成したビットマップを選択して、デスクトップ DC から DC に逆方向にブリットする必要があります。

于 2013-05-07T18:13:17.257 に答える