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

后端 未结 1 575
有刺的猬
有刺的猬 2020-12-29 14:11

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

相关标签:
1条回答
  • 2020-12-29 15:00
    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 ; )

    0 讨论(0)
提交回复
热议问题