近期在学习windows api编程,完全模仿的学习了,熟悉windows api和纯windows api编程
屏幕截图步骤:
1.如何捕获屏幕
2.捕获屏幕后怎么做到选定区域
3.选定区域后将图片写入剪贴板
具体还有很多细节需要考虑,如选定区域需要用不同颜色的画笔,如何知道区域被选择了......
主要代码如下,核心都在窗口回调函数中,不详细解释,几个重要的API函数在后面说明
//函数前置声明
void CaptureScreen();
void WriteDateToClipBoard();
// 全局变量:
HINSTANCE hInst; // 当前实例
WCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本
WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名
int screenW, screenH;
HDC g_memDC; //全局内存DC,存储位图
RECT rect; //截图矩形区域
bool isSelect=FALSE, isDrawing=FALSE;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
//画刷
LOGBRUSH brush;
brush.lbStyle = BS_NULL;
HBRUSH hBrush = CreateBrushIndirect(&brush);
//画笔
LOGPEN pen;
POINT penWidth;
penWidth.x = 2;
penWidth.y = 2;
pen.lopnColor = 0x0000FFFF;
pen.lopnStyle = BS_SOLID;
pen.lopnWidth = penWidth;
HPEN hPen = CreatePenIndirect(&pen);
//窗口信息
WINDOWINFO windowInfo;
windowInfo.cbSize = sizeof(WINDOWINFO);
switch (message)
{
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:

本文介绍了使用Windows API编程来编写屏幕截图小软件的过程,包括如何捕获屏幕、选定区域以及将图片写入剪贴板。在实现过程中,作者探讨了选择区域的处理细节,并分享了主要代码,特别关注窗口回调函数中的核心逻辑。文章提到了DC的概念以及SelectObject函数的应用。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



