一个简单的win32截图例子

摘要:
RegisterClass){MessageBox(NULL,TEXT)(“注册窗口类失败!

  该代码为把当前屏幕截图并保存为文件的代码。

SaveBitmapToFile.cpp文件在我前面一章文章中:点此进入

#include "SaveBitmapToFile.cpp"
#include <windows.h>
#define  IDC_SAVE 1
#define  IDC_FILEPATH 2


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) ;

void InitWindow(HWND hWnd, LPARAM lParam);

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT ("test") ;

    HWND         hWnd ;
    MSG          msg ;
    WNDCLASS     wndclass ;

    wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc   = WndProc ;
    wndclass.cbClsExtra    = 0 ;
    wndclass.cbWndExtra    = 0 ;
    wndclass.hInstance     = hInstance ;
    wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName  = NULL ;
    wndclass.lpszClassName = szAppName ;

    if (!RegisterClass (&wndclass))
    {
        MessageBox (NULL, TEXT ("注册窗口类失败!"), szAppName, MB_ICONERROR) ;
        return 0 ;
    }

    hWnd = CreateWindow (szAppName,
                        TEXT ("test"),
                        WS_OVERLAPPEDWINDOW,
                        100,
                        100,
                        350,
                        100,
                        NULL,
                        NULL,
                        hInstance,
                        NULL) ;

    ShowWindow (hWnd, iCmdShow) ;
    UpdateWindow (hWnd) ;

    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage (&msg) ;
        DispatchMessage (&msg) ;
    }
    return msg.wParam ;
}


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC         hdc ;
    PAINTSTRUCT ps;
    HBITMAP        hBitmap;
    HDC            hdcMem;
    static int screenx, screeny;
    static char filePath[MAXPNAMELEN];

    switch (message)
    {
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        EndPaint(hWnd,&ps);
        return 0;
            
    case WM_CREATE:
        InitWindow(hWnd, lParam);
        screenx = GetSystemMetrics(SM_CXSCREEN);
        screeny = GetSystemMetrics(SM_CYSCREEN);
        return 0;

    case WM_COMMAND:

        switch (LOWORD(wParam))
        {
        case IDC_SAVE:
            GetDlgItemText(hWnd, IDC_FILEPATH, (LPWSTR)filePath, sizeof(filePath));

            ShowWindow(hWnd, SW_HIDE);
            Sleep(500);

            hdc = GetDC(NULL);

            hBitmap = CreateCompatibleBitmap(hdc, screenx, screeny);
            hdcMem = CreateCompatibleDC(hdc);
            
            SelectObject(hdcMem, hBitmap);
            BitBlt(hdcMem, 0, 0, screenx, screeny, hdc, 0, 0, SRCCOPY);
            SaveBitmapToFile((LPCTSTR)filePath, hdc, hBitmap);
            
            ReleaseDC(hWnd, hdcMem);
            ReleaseDC(hWnd, hdc);

            ShowWindow(hWnd, SW_SHOW);

            MessageBox(hWnd, TEXT("截图完成"), TEXT("提示"), MB_OK);
            return 0;
        }

        return 0;

    case WM_DESTROY:
        PostQuitMessage (0) ;
        return 0 ;
    }

    return DefWindowProc (hWnd, message, wParam, lParam) ;
}

void InitWindow(HWND hWnd, LPARAM lParam)
{
    HWND btnSave, txtFilePath;

    btnSave = CreateWindow(TEXT("BUTTON"),
                        TEXT("Save"),
                        WS_CHILD | BS_PUSHBUTTON,
                        20,
                        30,
                        100,
                        25,
                        hWnd,
                        (HMENU)IDC_SAVE,
                        ((LPCREATESTRUCT) lParam)->hInstance,
                        NULL);

    txtFilePath = CreateWindow(TEXT("EDIT"),
                                TEXT("d:\\test.bmp"),
                                WS_CHILD | WS_BORDER,
                                20,
                                1,
                                300,
                                25,
                                hWnd,
                                (HMENU)IDC_FILEPATH,
                                ((LPCREATESTRUCT) lParam)->hInstance,
                                NULL);

    ShowWindow(btnSave, SW_SHOW);
    ShowWindow(txtFilePath, SW_SHOW);
}

免责声明:文章转载自《一个简单的win32截图例子》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇YAML 模板文件语法玩家堂2009年巨献,27款12CM风扇大型横评(1) 风扇参数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

vue3.0打包后页面空白,放置服务器

lintOnSave:true,//配置跨域devServer:{open:true、host:'localhost'、port:3000、https:false,//以上IP地址和端口是我们计算机的本地地址;以下是需要跨域的代理:{//配置跨域名“/api”:{target:”http://106.12.148.51',//这里的背景地址是模拟的;您应该填...

怎么使用vscode合并分支

1.切换分支到本地开发2.代码完成后提交代码到本地仓库3.切换分支到需要merge的test分支先pull一下,之后再合并分支—我开发的是这个feature,就合并这个分支4.当合并分支后,需要重新提交到远程:点击一下,直接提交...

easyExcel自动合并单元格

importcom.alibaba.excel.write.handler.CellWriteHandler;importorg.apache.poi.ss.usermodel.Sheet;importorg.apache.poi.ss.util.CellRangeAddress;int[]mergeColumnIndex){this.mergeRowInd...

Shell学习(五)Shell输出命令

“#-e启用转义echo”Itisatest“#输出:#正常!...

wxparse使用(富文本插件)

优点:唯一已知的可以将HTML转换为小程序识别的插件缺点:转换HTML标签可能需要大量的微信小程序标签和样式配置:步骤1,下载https://github.com/icindy/wxParse第二步:把它放到项目中。我选择页面目录。步骤3:配置wxml以添加:需要时使用:...

TensorRT在ubuntu18.04的安装

安装TensorRT前需要安装Cuda和cudnn,安装步骤可以参考ubuntu安装cuda和cudnn。...