• 一个简单的win32截图例子


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

    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);
    }
  • 相关阅读:
    跨平台编译ceres for Android
    解决OpenCV JavaCameraView相机preview方向问题
    OpenCV 4.0.1 找不到R.styleable解决
    mumu模拟器安装xposed--如何在android模拟器上进行root
    Windows编译OpenCV4Android解决undefined reference to std错误
    Skeleton with Assimp 骨骼动画解析
    Android GL deadlock timeout error
    Android device debug (adb) by Charge Only mode
    Firefox 多行标签的解决方案分享
    Linux 工程向 Windows 平台迁移的一些小小 tips
  • 原文地址:https://www.cnblogs.com/xukaixiang/p/2520247.html
Copyright © 2020-2023  润新知