• els 兼容性DC、传递图片到窗口


    1、函数定义(els.c)

    #include"els_h.h"
    void OnPaint(HDC hDc)
    {
        //创建兼容性DC。
        HDC HMemDC = CreateCompatibleDC(hDc);//内存id为:HMemDc,窗口id hDc。

        //创建兼容性位图。
        HBITMAP hBitmapBack= CreateCompatibleBitmap(hDc, 500, 600);

        //关联起来。
        SelectObject(HMemDC, hBitmapBack);

        Rectangle(HMemDC, 0, 0, 300, 600);//矩形框距离运行窗口的开始位置坐标和截至位置坐标。
        Rectangle(HMemDC, 30, 30, 60, 60);//矩形框距离运行窗口的开始位置坐标和截至位置坐标。
        //传递:
        //返回值:失败返回0,成功返回非零。
        //参数1:目标DC,窗口DC
        //参数2,3:目标的起始位置,注意是基于我们的窗口。
        //参数4,5:区域的大小。
        //参数6:源DC,也就是我们的内存DC。
        //参数7,8:内存图片的起始位置。
        //参数9:传递方式。
        //
        BitBlt(hDc, 0, 0, 300, 600, HMemDC, 0, 0, SRCCOPY);


        //释放DC
        DeleteObject(hBitmapBack);
        DeleteDC(HMemDC);
        

    }
    void Oncreate()
    {

    }
    2.主函数(els_main.c)

    #include
    #include"resource.h"
    #include"els_h.h"
    LRESULT CALLBACK PELouSi(HWND hWnd, UINT oMsg, WPARAM wParam, LPARAM lParam);
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR ipCmdLine,int nCmdShow)
    {
        //初始化窗口类。
        WNDCLASSEX  db;
        HWND hWnd;
        MSG msg;//结构体变量。

        db.cbClsExtra = 0;
        db.cbSize = sizeof(WNDCLASSEX);
        db.cbWndExtra = 0;

        db.hbrBackground = (HBRUSH)COLOR_BACKGROUND;//背景颜色。
        
        //返回值:鼠标的句柄。
        // 参数1:如果加载系统光标,NULL、如果加载自定义光标,填写实列句柄,hInstance;参数2:系统光标,直接填写定义好的宏、如果加载自定义光标,就用MAKEINTRESOURCE(240)加载相应的资源ID。
        //db.hCursor = LoadCursor(NULL,IDC_HAND);//加载系统定义的光标。
        db.hCursor = LoadCursor(hInstance,MAKEINTRESOURCE (IDC_NODROP));//自定义的光标。资源文件->添加->资源->Cursor->IDC_NODROP->新建。
        
        //返回值:图标的句柄。
        // 参数1:如果加载系统光标,NULL、如果加载自定义光标,填写实列句柄,hInstance;参数2:系统光标,直接填写定义好的宏、如果加载自定义光标,就用MAKEINTRESOURCE(240)加载相应的资源ID。
        //db.hIcon = LoadIcon(NULL,IDI_ASTERISK);//加载系统定义的光标。
        db.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));//状态栏图标。
        
        //db.hIconSm = NULL;//左上角图标为此定义。如果为空则默认为状态栏图标。
        db.hIconSm = LoadIcon(NULL,IDI_HAND);
        db.hInstance = hInstance;
        db.lpfnWndProc = PELouSi;//回调函数名。
        db.lpszClassName = "els";
        db.lpszMenuName = NULL;
        db.style = CS_HREDRAW | CS_VREDRAW;

        if(0==RegisterClassEx(&db))
        {
            int a = GetLastError();
            return 0;
        }

        //创建窗口。hWnd窗口句柄 失败返回NULL。 
        //窗口风格:参数4。
        hWnd=CreateWindowEx(WS_EX_TOPMOST,"els","els方块",WS_OVERLAPPEDWINDOW,100,100,500,600,NULL,NULL,hInstance,NULL);

        if (NULL == hWnd)//窗口句柄。 窗口的唯一标识。
        {

            return 0;
        }

        //显示窗口
        ShowWindow(hWnd, nCmdShow);
        
        //消息循环。队列。
        while(GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return 0;
    }
        //回调函数
        //返回值:LRESULT,CALLBACK调用约定。
        //参数1:窗口句柄;参数2:消息ID。
    LRESULT CALLBACK PELouSi(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)// LRESULT:long类型;UINT:无符号整型,消息的ID。
    {
        PAINTSTRUCT pt;//定义结构体。
        HDC hDc;
        //关闭窗口消息
        switch (nMsg)
        {
        case WM_CREATE://窗口信息处理程序接受的第一个消息,也是回调函数处理的第一个消息(为WM_CREATE)。此消息只产生一次,一般是用于初始化一些数据。
            //GetLastError();//优化。
            Oncreate();//游戏数据初始化。
            break;

        //是回调函数处理的第二个消息(为WM_PAINT)。
        //当窗口显示区域的一部分显示内容或者全部变为(无效),以致于必须(更新画面)时,将由这个消息通知程序。
        //窗口结构的最后的那个成员CS_HREDRAW|CS_VREDRAW,目的就是窗口大小发生变化的时候,产生WM_PAINT消息。
        //窗口重叠时,重叠部分渐渐出现时。
        case WM_PAINT:
            //GetLastError();//优化。
            hDc=BeginPaint(hWnd,&pt);//getDC,窗口可操作区域的标识。
            //在此之间画窗口的内容。
            //画方块。
            OnPaint(hDc);//增加代码可读性。
            
            EndPaint(hWnd, &pt);//结束。
            break;
        case WM_DESTROY:
                PostQuitMessage(0);//调用PostQuitMessage(0)这个函数发出WM_QUIT消息。//点叉系统依次产生WM_CLOSE,WM_DESTROY,WM_QUIT。
                break;
            
        }//手动处理点叉关闭消息。

        return DefWindowProc(hWnd, nMsg, wParam, lParam);
        //LRESULT a=DefWindowProc(hWnd, oMsg, wParam, lParam);//功能
        //return a;
    }
     

    3.头函数(els.h)

    #ifndef N_d
    #define N_d

    #include
    void OnPaint(HDC hDc);
    void Oncreate();

    #endif

  • 相关阅读:
    mysql mvcc介绍
    orcal创建索引
    nuc flycontroler dimension
    Flutter快速入门一:Dart语言
    基于Python的多功能本地视频播放系统
    Vue3学习记录——(9) isRef、isReactive、isProxy、toRaw
    LabVIEW利用局部放电分析高压电气设备状态诊断
    C语言 预处理详解
    代码随想录算法训练营第四十八天 | LeetCode 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II
    如何使用HTTP代理爬虫,防止对网站造成负面影响
  • 原文地址:https://blog.csdn.net/qq_52119661/article/details/125987034