近期在学习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;