2011-10-19 13 views
1

私はデスクトップフレームをキャッチし、HBITMAP構造体に格納します。 その後、アプリケーションのメインウィンドウのデバイスコンテキストから適切なメモリデバイスコンテキストを作成した後、HBITMAPを選択し、StretchBltを使用してビットマップを表示します。Windows GDIコンテキスト - ビットマップを表示

しかし、黒い枠しか表示されないため、これは期待どおりに機能しません。 hdcとmem_hdcはそれぞれ、前に初期化されたメインウィンドウのデバイスコンテキストとメモリデバイスコンテキストです。

... 
hDC desk_hdc, desk_mem_hdc; 
BITMAP bitmap; 
HBITMAP hbitmap; 
desk_hdc = GetDC(NULL); 

hbitmap = CreateCompatibleBitmap(desk_hdc, GetDeviceCaps(desk_hdc, HORZRES), GetDeviceCaps(desk_hdc, VERTRES)); 
GetObject(hbitmap, sizeof(BITMAP), &bitmap); 
SelectObject(mem_hdc, hbitmap); 
StretchBlt(hdc, 0, 0, 1024, 768, mem_hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY|CAPTUREBLT|NOMIRRORBITMAP); 
... 
+2

は、この権利を取得し、ハンドルをリークを避けるために定型SDKのコードサンプルを使用します。http://msdn.microsoft.com/en-us/library/dd183402%28v=VS.85% 29.aspx –

答えて

2

あなたStretchBlt操作のソースDCがmem_hdcで、互換性のある初期化されていないビットマップを持っています

は、ここでは、コードです。そういうわけで、あなたは黒い枠を得ます。

デスクトップのコンテンツをキャプチャする場合は、最初にmem_hdcのビットマップにコピーする必要があります。 SelectObjectを行う直後:

BitBlt(mem_hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight, desk_hdc, 0, 0, SRCCOPY); 
関連する問題