How to save the client area of a child Window to a Bitmap file?

只愿长相守 提交于 2019-11-30 13:10:00

问题


I have created a windows application using core WIN32 and VC++. In my parent window I have a child window and two buttons "save" and "send".

When user clicks the "save" button I want the savefileDialog to be opened and user should be able to save the image as a bitmap file.

The same file should be sent to a remote user using WinSock API.... My problem is, I don't know how to save the screen shot of the window to a bitmap file...

please help me out of this ... I have not used MFC, ATL or WTL....

thanks in advance,


回答1:


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() should do the trick.

To save as 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 );

I will leave the implementation of SaveBMPFile up to you ; )



来源:https://stackoverflow.com/questions/5950259/how-to-save-the-client-area-of-a-child-window-to-a-bitmap-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!