如何将子窗口的客户区保存到位图文件?

Ami*_*mit 7 c++ winapi bitmapimage visual-c++

我使用核心WIN32和VC++创建了一个Windows应用程序.在我的父窗口中,我有一个子窗口和两个按钮"保存"和"发送".

当用户单击"保存"按钮时,我想要savefileDialog打开,用户应该能够将图像保存为位图文件.

应该使用WinSock API将相同的文件发送给远程用户....我的问题是,我不知道如何将窗口的屏幕截图保存到位图文件中...

请帮帮我...我没有使用MFC,ATL或WTL ....

提前致谢,

Mik*_*wan 11

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_;
Run Code Online (Sandbox Code Playgroud)

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 );
Run Code Online (Sandbox Code Playgroud)

我将把SaveBMPFile的实现留给你; )