• (一)Win消息机制,SDK编程基础


    一,基本概念

    SDK:软件开发工具包(缩写:SDK、外语全称:Software Development Kit

    API:应用程序接口

    WINAPI:Windows平台下的系统调用,包含 windows.h

    窗口:父窗口和子窗口,客户区和非客户区

    句柄:结构体变量,窗口句柄 :HWND,图标句柄:HICO,类似于文件操作符,进程控制块等

    消息队列

    消息

    窗口过程函数

    main()

    WinMain()  // WINAPI  入口地址 

    二,winAPI窗口程序

    1.定义入口函数Win Main()

    2.创建一个窗口

      a),设计窗口类 WNDCLASS (给成员变量赋值)

      b),注册窗口类

      c),显示和更新窗口

    3,消息循坏

    4,窗口过程函数

    MSDN:winAPI,MFC

     

    #include <Windows.h>
    
    LRESULT CALLBACK WindowProc(HWND hwnd,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam
        )
    {
        return DefWindowProc(hwnd,uMsg,wParam,lParam);
    }
    
    // WINAPI:修饰函数,规定函数参数入栈从右往左,函数调用完毕,自动清理堆栈
    // CALLBACK
    int WINAPI WinMain(HINSTANCE hInstance, // 应用程序实例
        HINSTANCE hPreInstabce,// 上一个应用程序实例,不用
        LPSTR lpCmdLine, // LPSTR :typedef CHAR * LPSTR,long pointer string. 命令行参数
        int nCmdShow // 窗口显示的样式,最大化,最小化
    )
    {
        /*
        1,定义入口函数WinMain()
        2,创建一个窗口
              a),设计窗口类 WNDCLASS (给成员变量赋值)
            b),注册窗口类
            c),显示和更新窗口
        3,消息循环
        4,窗口过程函数
        */
    
        // 设计窗口类 WNDCLASS
        WNDCLASS wc;
        wc.cbClsExtra = 0;// 类的附加信息
        wc.cbWndExtra = 0;// 窗口的附加信息
    
        // 获取系统默认的白色画刷
        wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 背景色,必须写
        //wc.hCursor = NULL; // 使用默认
        wc.hCursor = LoadCursor(NULL, IDC_HELP); // 加载系统默认光标
        //wc.hIcon = NULL;
        wc.hIcon = LoadIcon(NULL,IDI_WARNING); // 加载系统默认图标
    
        wc.hInstance = hInstance; // 应用程序实例
        wc.lpfnWndProc = WindowProc; // 窗口过程函数名字,消息处理函数
    
        wc.lpszClassName = TEXT("abc"); // 类的名字
        wc.lpszMenuName = NULL; // 菜单的名字
        wc.style = nCmdShow; // 显示风格
    
        // 注册窗口类,告诉系统窗口过程函数的入口地址
        RegisterClass(&wc);
    
        // 创建窗口类
        HWND hWnd = CreateWindow(TEXT("abc"),
            TEXT("hello,windows"),
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            NULL,
            NULL,
            hInstance,
            NULL);
        // 显示和更新窗口
        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);
    
        // 消息循环
        MSG msg;
        // 如果接收到 WM_QUIT,返回 0,退出
        // 如果出错,返回 -1,不退出
        while (GetMessage(&msg, hWnd, 0, 0)) {
            // 翻译工作
            // 虚拟按键转为标准字符 WM_CHAR
            TranslateMessage(&msg);
    
            // 给操作系统分发消息
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }

    LRESULT CALLBACK WindowProc(HWND hwnd, // 窗口句柄,消息所属的窗口
        UINT uMsg,// 消息标志
        WPARAM wParam,// 附件信息
        LPARAM lParam
        )
    {
        switch (uMsg)
        {
        case WM_LBUTTONDOWN:
            MessageBox(hwnd,TEXT("ABC"), TEXT("鼠标左键安下"),MB_OK);
            break;
        case WM_DESTROY:
            PostQuitMessage(2); // WM_QUIT,给主函数 return msg.wParam
            break;
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
    
        
    }

    绘图

    LRESULT CALLBACK WindowProc(HWND hwnd, // 窗口句柄,消息所属的窗口
        UINT uMsg,// 消息标志
        WPARAM wParam,// 附件信息
        LPARAM lParam
        )
    {
        switch (uMsg)
        {
        case WM_LBUTTONDOWN:
            MessageBox(hwnd,TEXT("ABC"), TEXT("鼠标左键安下"),MB_OK);
            break;
        case WM_PAINT:
        {
            PAINTSTRUCT ps;// 绘图结构体
            HDC dc = BeginPaint(hwnd, &ps); // 开始
            WCHAR *p = L"aaaaaaa";// 转为宽字节
            TextOut(dc, 30, 30, p, wcslen(p));
            EndPaint(hwnd, &ps);
            break;
        }
    
        case WM_DESTROY:
            PostQuitMessage(2); // WM_QUIT,给主函数 return msg.wParam
            break;
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
    
        
    }

  • 相关阅读:
    oracle 按关键字排序前几行
    oracle 查看某表的前10行
    linux 7安装部署Redis
    oracle 查看库表状态
    centos 7 启动和关闭zabbix 服务
    oracle 创建用户密码及赋予登录权限
    linux 控制root登录宿主机时间
    centos 更改用户登录宿主机时间
    oracle 查询、创建、删除 数据库用户
    Django基础四之模板系统
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10798379.html
Copyright © 2020-2023  润新知