zoukankan      html  css  js  c++  java
  • 001字符串与数字的互相转换,错误处理,消息泵机制,以及回调函数,注册窗口基本流程

      1.一个简单的警告框

    #include <windows.h>
    #include "stdio.h"
    int APIENTRY wWinMain(
        HINSTANCE hInstance,
        HINSTANCE hPreInstance,
        LPTSTR    lpCmd,
        int       nCmd
        ){
    //一个简单的警告框
        TCHAR buf3[] = TEXT("15pb");
        MessageBox(0, buf3, TEXT("25期"), 0);
     
     
    参数,(第二个内容,第三个标题)
     
    2.字符串与数字的互相转换
    •     字符串转数字
    方法一
     
        char buf[50] = "9527";
        int a = atoi(buf);
     
     
    方法二
     
        char buf[50] = "9527";
        int b = 0;
        sscanf_s(buf, "%d", &b);
     
    这里需要头文件stdio.h  参数:转换目标地址,转换格式,存储位置
    •     数字转字符串
     
    <wiz_code_mirror>
     
     
     
     
     
        int num = 123987;
        double fnum = 63.5;
        char buf1[200] = {};
        sprintf_s(buf1, 200, "%d", num);
     
     
    参数(保存目的地地址,缓存区大小,转换对象的格式,转换对象)
    其本质是字符拼接
    总结:
        字符串转数字    用sscanf_s(转换目标地址,转换格式,存储位置)        谁  怎么转  转给谁
        数字转字符串    用sprintf_s(保存目的地,缓存区大小,转换对象的格式,转换对象)      谁    保存(缓存区大小)    另一个的数字    
     
    3.错误处理
    windows下每一个线程都有一块区域能够存储错误码,可以使用SetLastError()这个API设置一个数值,
        每一个API函数在退出之前都会调用这个函数,给此API一个错误码,
        我们在API结束后,调用GetLastError()得到错误码
     
        查找错误码的方法
        1.    VS 工具    --  错误查找
        2.    使用FormatMessage函数,由错误码得到错误字符串
        3.    在VS监视栏中输入"err,hr"    (逗号)
     
        自定义错误
        SetLastError给自己函数定义错误码
     
        总结:
                想要知道一个函数的调用结果,在函数调用完毕之后,立即使用GetLastError函数。否则错误码可能被其他API覆盖
     
    4.消息泵机制,以及回调函数

     
        MSG msg = {};
        while (GetMessage(&msg, 0, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
     
     
     
    GetMessage();              从应用程序消息队列取走一条消息
    TranslateMessage();     作用是将虚拟键转换为字符消息,字符消息被送到调用线程的消息队列中,在下一次线程调用函数GetMessage读出
    DispatchMessage();      该函数调度一个消息给窗口程序,通常调度从GetMessage取得消息
     
    回调函数模型
    LRESULT    CALLBACK     WindowProc(
            HWND        hwnd;                    //窗口句柄
            UINT           umessage;            //消息ID
            WPARAM    wParam;               //消息参数1
            LPARAM      lParam;                //消息参数2
    )
    这里需注意,返回值类型为    LRESULT    因为回调函数返回值必然是调用DefWindowProc函数来处理,所有回调函数返回值不能为0
    LRESULT本质就是  long    长整形 。
    DefWindowProc();    此函数返回值即是上面回调函数的返回值,本函数作用,它将窗口不处理的消息默认传递给系统做默认处理,此函数在  回调函数中必不可少
     
    5.注册窗口
     

     
    #include <windows.h>
    LRESULT CALLBACK wProc(
        HWND       hWND,
        UINT       Message,
        WPARAM     wparam,
        LPARAM     lparam
        ){
        return DefWindowProc(hWND, Message, wparam, lparam);
    }
     
    int APIENTRY wWinMain(
        HINSTANCE   hInstance,
        HINSTANCE   hPreInstance,
        LPTSTR      lpCmd,
        int         nCmd
        )
    {
    //注册窗口
     
    //设计窗口类
        WNDCLASSW wnd;
        wnd.lpfnWndProc = wProc;            //这步最为关键,需要指定回调函数是谁
        wnd.lpszClassName = L"第一个窗";    //这步也关键,需指明窗口类名,上两步必不可少
        wnd.style = CS_HREDRAW | CS_VREDRAW;
        wnd.cbClsExtra = 0;                              //分派给窗口类的扩展的字节数
        wnd.cbWndExtra = 0;                              //分派给窗口实例的扩展的字节数
        wnd.hInstance = hInstance;                       //实例句柄
        wnd.hIcon = 0;                                   //图标
        wnd.hCursor = 0;
        wnd.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);  //背景颜色
        wnd.lpszMenuName = 0;
     
    //注册窗口类
        RegisterClass(&wnd);                //正如书上所说,你开店,需要到工商局注册,这步作用也类似
                                            //将刚才设计好的窗口类,传地址进来
     
    //创建窗口
        HWND hWND = CreateWindow(
            L"第一个窗",
            L"我叫内容",
            WS_OVERLAPPEDWINDOW,
            0, 0, 400, 600,
            0,
            0,
            hInstance,
            0
            );
     
    //显示刷新窗口
        ShowWindow(hWND, SW_SHOW);
        UpdateWindow(hWND);
     
    //建立消息泵
        MSG msg = {};
        while (GetMessage(&msg,0,0,0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return 0;
    }
     
     
    整体思路(套路)
    1.先设计一个窗口类
    2.在注册窗口类
    3.创建窗口
    4.显示刷新窗口
    5.建立消息泵,循环接受处理消息(前提要将回调函数写好)
     
     
     
  • 相关阅读:
    python challenge level 2
    python challenge level1
    近期很忙
    python challenge level 3
    链 小实验
    结构体小小应用
    结构体 弄成绩统计比较好
    HTC学习
    WEBFX XTREE学习笔记
    向dataset中添加一行记录,老是忘了,记下来
  • 原文地址:https://www.cnblogs.com/Tempt/p/9987802.html
Copyright © 2011-2022 走看看