zoukankan      html  css  js  c++  java
  • (一)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);
        }
    
        
    }

  • 相关阅读:
    资源文件 -- 初级应用篇
    Dephi中资源文件的应用
    VC++ 中使用内存映射文件处理大文件
    Delphi中正常窗口的实现
    让程序只运行一个实例
    多条明细(绑定到一个字段)汇总
    在更新之后最好有个判断 看是否更新上 编码码自动生成
    Delphi中有序型
    使用powerDesign画er图 并用 Database --->Generate Database ---> Genarate Script一次性将表结构的脚本导出来。
    .Net中的水晶报表
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10798379.html
Copyright © 2011-2022 走看看