• Windows编程___创建窗口


      创建Windows窗口不难,可以简要的概括为:

       1,# 注册一个窗口类

          填充WNDCLASS结构

          书写窗口消息处理函数WinProc

       2,# 创建一个窗口

          填写基本的窗口信息

       3,# 显示窗口

       4,# 循环处理窗口信息

       相关函数:

    注册窗口类(重点是填充WNDCLASS结构)

    ATOM RegisterClass (CONST WNDCLASS *lpWndClass)

        WNDCLASS结构

    // 也不很清楚,就值知道几个重要的,其他的照葫芦画瓢写的.
    Wnd.cbClsExtra = NULL;
    Wnd.cbWndExtra  = NULL;
    Wnd.hbrBackground = (HBRUSH)COLOR_WINDOW;
    Wnd.hCursor = LoadCursor(hInstance,MAKEINTRESOURCE(IDC_ARROW));
    Wnd.hIcon = NULL;
    Wnd.hInstance = hInstance;
    Wnd.lpszClassName = sz_ClassName;  //类名
    Wnd.lpszMenuName = NULL;  //菜单
    Wnd.style = CS_HREDRAW | CS_VREDRAW; //类的类型 CS_type
    Wnd.lpfnWndProc = WndProc; //窗口处理函数

    创建窗口

    HWND CreateWindow(          LPCTSTR lpClassName,  //基于那个类的窗口
        LPCTSTR lpWindowName, //窗口标题
        DWORD dwStyle,  //窗口风格 WS_***
        int x,  //左上角
        int y,  //右上角
        int nWidth,  //
        int nHeight,  //
        HWND hWndParent,  //父窗口句柄
        HMENU hMenu,  //菜单句柄,注意,如果是"BOTTON"类的窗口,那么此参数为按钮ID,与处理消息有关
        HINSTANCE hInstance,  //窗口实例,我不是很清楚干嘛的,不过WinMain函数参数,就有一个hInstance
        LPVOID lpParam //不是很清楚,貌似是窗口创造前要发送的消息(发送窗口处理函数)WM_CREATE 消息
    );
    //窗口创造就会给处理函数发送一个WM_CREATE消息
    //如果我们不需要处理的消息可以交个DefWindowProc()函数处理,并返回.

    窗口处理函数(需要自己写 然后交给windows取调用的. 在RgisterClass中传递给Windows)

    //记得消息处理函数要有 CALLBACK 声明
    LRESULT    CALLBACK WndProc(HWND hWnd,
                    UINT uMsg,
                    WPARAM wParam,
                    LPARAM lParam)
    {
            //uMsg可以初步判断消息
            //有的消息我们直接通过uMsg就可以直接获取,但是有些还需要结合wParam,lParam
        switch(uMsg){
        case WM_CREATE:
            //窗口创造前执行.
            break;
        case WM_LBUTTONDOWN:
            //  鼠标左键被点下
            break;
        case WM_PAINT:
            hDc = BeginPaint(hWnd,&paint);
            //绘画消息触发
            EndPaint(hWnd,&paint);
            break;
        case WM_CLOSE: //标题框的关闭按钮被按下
            PostQuitMessage(WM_QUIT);
            break;
        case WM_COMMAND:
            if(LOWORD(wParam) == BOTTON_ID && HIWORD(wParam) == BN_CLICKED){
                //按钮被按下 
                //LOWORD(wParam)  低位 HIWORD(wParam) 高位
            }
            break;
        default:
            return DefWindowProc(hWnd, uMsg, wParam, lParam); //我们不需要处理的消息都默认让系统帮我们处理
        }
        return 0;
    }       

    显示窗口

    ShowWindow(hWND,nCmdShow); //hWND是CreateWindow返回的窗口句柄,nCmdShow是显示窗口的方式(可以直接用WinMain函数的最后一个参数nCmdShow)
    UpdateWindow(hWND); //=一个WM_PAINT消息来刷新窗口

    消息循环

    //处理窗口消息
    while(GetMessage(&Msg,NULL,0,0)){
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
    }
    // emmmm...直接Copy VS项目的代码的,还把一些删了,但是,貌似也没错.
  • 相关阅读:
    图片懒加载原生写法。
    ES6新声明
    下拉刷新上拉加载
    angular动画
    angular路由切换后 轮播以及iscrollJs失效的问题
    ui-route多级嵌套时的默认显示。
    iscroll.js的基本布局
    angular ng-route和ui-route
    require.js JQ
    Cookie&Session
  • 原文地址:https://www.cnblogs.com/cgjh/p/8099901.html
Copyright © 2020-2023  润新知