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

标签 c++ winapi visual-c++ bitmapimage

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

当用户单击“保存”按钮时,我希望打开 savefileDialog 并且用户应该能够将图像保存为位图文件。

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

请帮我解决这个问题...我没有使用过 MFC、ATL 或 WTL...

提前致谢,

最佳答案

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 的实现留给你; )

关于c++ - 如何将子窗口的客户区保存到位图文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5950259/

相关文章:

c++ - 视觉 2015 C++ 编译器 : Call of static member with object does not lead to compiler error

c - 在 Win32 SDK 中是否有一种简单的方法来创建接受键盘输入的模态子窗口?

c++ - const BYTE * 和 const LPBYTE

c++ - 代码在有断点的情况下运行良好,但在没有断点的情况下则无法正常运行

c++ - 如何在 Visual C++ 中跟踪到外部编译的库

c++ - QPixmap 图像文件未出现在 QGraphicsScene 上

c++ - 使用 rand() 函数生成 ascii 值

winapi BN_CLICKED如何识别单击了哪个按钮?

c++ - 如何有条件地为模板头设置编译器优化

c++ - 在 Objective-C block 中泄漏 C++ shared_ptr