zoukankan      html  css  js  c++  java
  • MFC初步----在C语言文件实现Windows窗口调用

    • 新建项目----Windows桌面向导:

    •  选择配置项目

    • 上机环境win7操作系统下vs2017,新建一个.c文件
    • 简单窗口程序
    #include<windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
        MessageBox(NULL,TEXT("会员注册成功"),TEXT("欢迎来到松鼠搏击!"),MB_OK);
        return 0;
    }

    利用winapi实现一个自定义windows窗体程序,实验环境:win7下 vs2010,注意!win7下vs2017会出现编译通过,运行成功,但死活不出现窗体的现象

    • 定义消息处理回调函数(所谓消息:就是窗体遇到诸如,画图,窗口销毁等消息时,进行的操作)
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
            case WM_PAINT:
                return 0;
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
            //其他类型消息转给windows操作系统处理,如果需要,可以在case继续列出
        }
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    • 窗口属性定义
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int nCmdShow)
    {
        //MessageBox(NULL,TEXT("会员注册成功"),TEXT("欢迎来到松鼠搏击!"),MB_OK);
        HWND hWnd;
        MSG msg;//微软用C语言做出的api
        WNDCLASS wc;
        //memset(&wc, 0, sizeof(WNDCLASS));
        wc.style = 0;
        wc.lpfnWndProc = (WNDPROC)WndProc;//当窗口接收到消息时,按照WndProc方式定义的方法处理接收到的消息
        //return msg.wParam;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hInstance;//句柄的实例---当前实例----所谓句柄的实例,假设我们打开了三个记事本文件,那么每一个记事本即为一个实例,三个就是三个实例
        wc.hIcon = LoadIcon(NULL,IDI_WINLOGO);//左上角图标
        wc.hCursor = LoadCursor(NULL,IDC_ARROW);//光标----箭头形状,微软定义好的
        wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        wc.lpszMenuName = NULL;
        wc.lpszClassName = "MyWndClass";//窗口名字,后续创建窗口时,根据名字来创建
        //-------------------------注册窗口----------------------------------------
        RegisterClass(&wc);
        //-------------------------创建窗口----------------------------------------
        hWnd = CreateWindow(
            TEXT("MyWndClass"),//窗口类名
            TEXT("李顺溜,包达廷,高超,尚誉"),//标题
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT,//窗口位置之---x轴
            CW_USEDEFAULT,//窗口位置之---y轴
            CW_USEDEFAULT,//
            CW_USEDEFAULT,//
            NULL,//窗口的父窗口句柄
            NULL,//窗口的菜单句柄
            hInstance,//窗口的句柄
            NULL);
        //显示和更新窗口
        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);
    
        //消息循环
        while (GetMessage(&msg,NULL,0,0))
        {
            TranslateMessage(&msg);//把键盘输入处理为ASCII码
            DispatchMessage(&msg);//把消息转发给窗口过程
        }
        //return 0;
        return msg.wParam;
    } 
    • 总体代码
    #include<windows.h>
    //窗口回调函数H是handler(句柄)的简写
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int nCmdShow)
    {
        //MessageBox(NULL,TEXT("会员注册成功"),TEXT("欢迎来到松鼠搏击!"),MB_OK);
        HWND hWnd;
        MSG msg;//微软用C语言做出的api
        WNDCLASS wc;
        //memset(&wc, 0, sizeof(WNDCLASS));
        wc.style = 0;
        wc.lpfnWndProc = (WNDPROC)WndProc;//当窗口接收到消息时,按照WndProc方式定义的方法处理接收到的消息
        //return msg.wParam;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hInstance;//句柄的实例---当前实例----所谓句柄的实例,假设我们打开了三个记事本文件,那么每一个记事本即为一个实例,三个就是三个实例
        wc.hIcon = LoadIcon(NULL,IDI_WINLOGO);//左上角图标
        wc.hCursor = LoadCursor(NULL,IDC_ARROW);//光标----箭头形状,微软定义好的
        wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        wc.lpszMenuName = NULL;
        wc.lpszClassName = "MyWndClass";//窗口名字,后续创建窗口时,根据名字来创建
        //-------------------------注册窗口----------------------------------------
        RegisterClass(&wc);
        //-------------------------创建窗口----------------------------------------
        hWnd = CreateWindow(
            TEXT("MyWndClass"),//窗口类名
            TEXT("李顺溜,包达廷,高超,尚誉"),//标题
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT,//窗口位置之---x轴
            CW_USEDEFAULT,//窗口位置之---y轴
            CW_USEDEFAULT,//
            CW_USEDEFAULT,//
            NULL,//窗口的父窗口句柄
            NULL,//窗口的菜单句柄
            hInstance,//窗口的句柄
            NULL);
        //显示和更新窗口
        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);
    
        //消息循环
        while (GetMessage(&msg,NULL,0,0))
        {
            TranslateMessage(&msg);//把键盘输入处理为ASCII码
            DispatchMessage(&msg);//把消息转发给窗口过程
        }
        //return 0;
        return msg.wParam;
    }
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
            case WM_PAINT://绘画事件,窗口所见部分都是画出来的
                return 0;
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
            //其他类型消息转给windows操作系统处理
        }
        return DefWindowProc(hwnd, message, wParam, lParam);
    }

    效果:

    怎么样?是不是进一步鼓励着你写出多彩C程序的决心?

  • 相关阅读:
    CSS选择器
    CSS框模型
    AJAX
    HTML 表单
    二叉树
    词嵌入、word2vec
    双向、深层循环神经网络
    20201012----每天都在进步吗?
    20201012--环境搭建
    20201011--记录一下
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/12114208.html
Copyright © 2011-2022 走看看