GDI+实现一个截屏程序:创建一个截图按钮,点击后等待2秒截图,然后通过保存文件对话框保存(编译环境:vs2022桌面应用程序)
时间: 2024-04-10 08:26:50 浏览: 79
您好!以下是使用GDI+实现截屏程序的示例代码:
```cpp
#include <windows.h>
#include <gdiplus.h>
#include <iostream>
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")
void SaveScreenshot(Bitmap* bitmap)
{
CLSID clsid;
GetEncoderClsid(L"image/png", &clsid); // 可根据需要更改保存格式
SaveFileDialog saveDlg;
saveDlg.Filter = L"PNG Image|*.png"; // 可根据需要更改保存格式
if (saveDlg.ShowDialog() == DialogResult::OK)
{
std::wstring filename = saveDlg.FileName;
// 将保存路径转换为多字节字符串
std::string filename_mb(filename.begin(), filename.end());
// 将Bitmap保存为文件
bitmap->Save(filename.c_str(), &clsid);
std::cout << "Screenshot saved as: " << filename_mb << std::endl;
}
}
void CaptureScreen()
{
Sleep(2000); // 等待2秒
// 获取屏幕尺寸
int screenWidth = GetSystemMetrics(SM_CXSCREEN);
int screenHeight = GetSystemMetrics(SM_CYSCREEN);
// 创建一个与屏幕相同尺寸的Bitmap对象
Bitmap bitmap(screenWidth, screenHeight);
Graphics graphics(&bitmap);
// 根据屏幕内容绘制到Bitmap对象中
graphics.CopyFromScreen(0, 0, 0, 0, bitmap.GetWidth(), bitmap.GetHeight());
SaveScreenshot(&bitmap);
}
int main()
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
CaptureScreen();
GdiplusShutdown(gdiplusToken);
return 0;
}
```
在这个示例中,我们使用GDI+库来实现截屏功能。程序会等待2秒后,使用`CopyFromScreen`方法将屏幕内容复制到一个Bitmap对象中,然后通过保存文件对话框选择保存路径,并将Bitmap对象保存为PNG格式的图片文件。
请确保在项目属性中链接了GDI+库(gdiplus.lib),并包含了相应的头文件。
希望这可以帮助到您!如果您有任何问题,请随时提问。
阅读全文