7

コア WIN32 と VC++ を使用して Windows アプリケーションを作成しました。私の親ウィンドウには、子ウィンドウと「保存」と「送信」の 2 つのボタンがあります。

ユーザーが「保存」ボタンをクリックするsavefileDialogと、画像が開かれ、ユーザーは画像をビットマップファイルとして保存できるようになります。

WinSock API を使用して同じファイルをリモート ユーザーに送信する必要があります.... 私の問題は、ウィンドウのスクリーン ショットをビットマップ ファイルに保存する方法がわからないことです...

これから私を助けてください...私はMFC、ATL、またはWTLを使用していません....

前もって感謝します、

4

1 に答える 1

10
RECT rect     = {0};

GetWindowRect( hwnd, &rect );
ATL::CImage* image_ = new CImage();
image_ -> Create( rect.right - rect.left, rect.bottom - rect.top, 32 );

HDC device_context_handle = image_ -> GetDC();
PrintWindow( hwnd, device_context_handle, PW_CLIENTONLY );
image_ -> Save( filename );
image_ -> ReleaseDC();

delete image_;

PrintWindow()トリックを行う必要があります。

HBITMAP として保存するには:

HDC hDC       = GetDC( hwnd );
HDC hTargetDC = CreateCompatibleDC( hDC );
RECT rect     = {0};

GetWindowRect( hwnd, &rect );

HBITMAP hBitmap = CreateCompatibleBitmap( hDC, rect.right - rect.left,
    rect.bottom - rect.top );
SelectObject( hTargetDC, hBitmap );
PrintWindow( hwnd, hTargetDC, PW_CLIENTONLY );
SaveBMPFile( filename, hBitmap, hTargetDC, rect.right - rect.left,
    rect.bottom - rect.top );

DeleteObject( hBitmap );
ReleaseDC( hwnd, hDC );
DeleteDC( hTargetDC );

SaveBMPFile の実装はあなたに任せます。)

于 2011-05-10T12:53:11.147 に答える