[C++/easyx]保存包含鼠标图标的屏幕图片

本文介绍了如何用C++编写一个函数,该函数能够捕获包含鼠标的屏幕快照。通过调用Windows API,获取屏幕尺寸、光标信息以及光标位图,然后利用BitBlt函数将鼠标图标融合到屏幕截图中,最终保存为图像文件。
摘要由CSDN通过智能技术生成

为了写一个含鼠标的录屏软件,我研究了一下关于鼠标的相关资料,最终写出了这么一个自制函数实现获取含鼠标图标的屏幕图片。

以下是函数内容:

#include <Windows.h>
#include <graphics.h>
void SaveImage() {
	//获取屏幕宽高
	int xScreen = GetSystemMetrics(SM_CXSCREEN);
	int yScreen = GetSystemMetrics(SM_CYSCREEN);
	//定义成果图的宽高
	IMAGE img{ xScreen,yScreen };
	//获取桌面HDC和成果图的HDC
	HDC srcDC = GetDC(NULL);
	HDC dstDC = GetImageHDC(&img);

	//开始获取鼠标相关信息
	CURSORINFO cursorInfo;
	cursorInfo.cbSize = sizeof(CURSORINFO);
	GetCursorInfo(&cursorInfo);//获取光标信息
	POINT cursorPoint = cursorInfo.ptScreenPos;//光标当前所在坐标Pos
	ICONINFO iconinfo;
	GetIconInfo(cursorInfo.hCursor, &iconinfo);//获取光标对应的位图信息
	BITMAP cursorBitMap;
	GetObject(iconinfo.hbmColor, sizeof(BITMAP), &cursorBitMap);//获取鼠标位图宽高
	//定义鼠标的掩码图和背景图
	IMAGE cursor1Img{ cursorBitMap.bmWidth, cursorBitMap.bmHeight };
	IMAGE cursor2Img{ cursorBitMap.bmWidth, cursorBitMap.bmHeight };
	//获取掩码图和背景图的HDC
	HDC cur1DC = GetImageHDC(&cursor1Img);
	HDC cur2DC = GetImageHDC(&cursor2Img);
	//绘入
	SelectObject(cur1DC, iconinfo.hbmMask);
	SelectObject(cur2DC, iconinfo.hbmColor);
	BitBlt(dstDC, 0, 0, xScreen, yScreen, srcDC, 0, 0, SRCCOPY);
	BitBlt(dstDC, cursorPoint.x, cursorPoint.y, cursorBitMap.bmWidth, cursorBitMap.bmHeight, cur1DC, 0, 0, SRCINVERT);
	BitBlt(dstDC, cursorPoint.x, cursorPoint.y, cursorBitMap.bmWidth, cursorBitMap.bmHeight, cur2DC, 0, 0, SRCPAINT);

	saveimage(TEXT("bg.bmp"), &img);
	return;
}
int main()
{
	SaveImage();
	return 0;
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值