• mfc笔记(一)


    首先声明,这是我的个人笔记,所以,比较简略,看的吕鑫的C++视频,针对MFC的课程,随手写的笔记,所以,很多地方,,一般看不懂,参考文档是MSDN,仅供个人参考复习用。

    ---------------------------------------------------------------------------------------------------------------------------------------------------

    1.设计窗口类wndclass
    style = ..|..设计
    style& ~ ...去除
    回调函数指针 函数名可以作为函数指针,回调函数代码需要自己编写
    额外的内存
    当前应用程序的实例 形参
    图标 装载图标loadicon(null,默认图标)创建图标 createicon
    光标 类似于图标使用
    画刷的句柄 getstockobject 返回不同颜色的画刷,设置背景 强制类型转换
    常量字符串 菜单名
    常量字符串 类名
    2.注册窗口类
    3.创建一个窗口
    定义一个句柄 ,用createwindow(注册的类名(必须和设计类的类名一致),标题栏,窗口的类型(可以改变窗口类型),窗口的坐标(可以用默认值),窗口的高度和宽度(可以用默认值),父窗口的句柄,menu的句柄,该实例,多文档的句柄)
    4.显示窗口
    5.更新窗口,刷新一次窗口
    6.getmessage从消息队列中读信息
    获取哪个窗口的消息
    最小的消息值,对消息范围进行过滤
    最大的消息值
    translatemessage
    转换翻译消息 对取到的消息进行转换,并送到消息队列中
    dispatchmessage
    将收到的消息传到窗口的回调函数即系统
    7.窗口回调函数(窗口过程函数)
    wndclass中的第二个参数
    dispatchmessage会调用该函数 , 一旦有消息产生就会调用该函数
    messagebox弹出消息框
    HDC DC=device context 设备上下文
    hdc 设备上下文句柄
    getdc()获取dc的句柄,某个窗口的句柄 textout文本输出函数 strlen获取字符串长度
    releasede 释放dc,否则会造成内存泄漏
    窗口从无到有会进行窗口的重绘
    beginpaint进行重绘 该函数有一个结构体的指针,她会自动填充该结构体,所以无需关心
    endpaint结束重绘
    窗口销毁和程序销毁是不一样的
    winmain函数退出,程序就退出了
    缺省处理:default语句并不可少,让系统进行默认处理
    8.CALLBACK _stdcall
    WINAPI _stdcall
    WINAPIU _cdecl
    默认是_cdecl的函数调用模式,所以当想要用stdcall调用模式的时候,需要再函数前面显式的写上CALLBACK, 模式主要是和堆栈方式,编译啥的有关

    C++基础:
    1.结构体最后要加;类最后要加分号;
    2.结构体中可以定义函数
    将结构体换为class
    class ..
    {
    public:
    int i;
    int y;
    void output()
    {
    ...
    }
    }
    结构体是一种特殊的类,类中缺省情况为private,结构体中缺省情况是public
    构造函数 没有返回值,名字为类名,用于初始化
    析构函数 ~加构造,生命周期结束的额时候调用,来进行对象释放。
    构造函数可以有参数,而析构函数不能有参数,而且析构函数只能有一个
    当程序用delete删除堆内存对象的时候,也会调用析构函数
    this指针,是指向对象本身的,而不是指向类

    继承:
    用“:public。。。”
    protected 方法可以被子类访问,但不可以被外界访问,被保护着

    对于子类是以哪种方式来继承父类,影响的是子类的对象能够调用的方法,例如“: private...”则子类的对象都不能调用父类任何权限的方法,因为都被子类变为了private了

    在子类构造函数中向父类带参数的构造函数传递参数 fish():animal(300,400){}
    也可以在构造函数上进行常量的初始化fish:animal(400,300),a(1)
    const int a;
    函数重载发生在一个类中,函数覆盖发生在子类与父类之间,如果不想覆盖而是增加的话,可以先写上父类::函数,然后再写特色的

    全局函数:
    向上转型可以是默认的
    virtual函数:虚函数
    采用的迟绑定技术,看看到底是哪个对象(父类还是子类的对象)调用(多态性)
    如果子类调用,如果子类有该函数,则调用子类,子类没有则调用父类的

    纯虚函数:
    virtual void breathe()=0;没有实现函数,所以该类不能产生对象,只能作为基类,为派生类服务了

    该类的子类必须实现该函数才可以产生对象

    补充一个程序例子,

    引用:
    变量的别名,而且必须在定义的时候初始化,而且只能在定义的时候初始化,始终指向初始化的那个变量。
    引用和指针的不同:指针变量本身要占据内存空间,指向地址
    引用不需要占据内存地址,就相当于给变量起了个别名。
    引用大多用在函数传参的情况,使用起来比指针清晰


    把类的定义和内部函数的声明放在头文件中,将定义放在源文件中,用作用域来实现拿出来
    实现
    返回值 。。::。。。(。) 当然构造函数没有返回值

    《》到系统目录中找头文件 ,“”双引号先搜索当前目录再到系统目录

    解决头文件重复包含的问题
    #ifndef ...
    #define ...
    ......
    #endif
    在每一个.h中写


  • 相关阅读:
    leetcode 296 题解(暴力破解)
    2.7最大公约数(递归解法)
    2.6斐波那契数列(多分支递归)
    2.5翻转字符串(递归4 )
    2.4对arr数组元素求和
    2.3 用递归形式打印i到j
    2.2用递归方式解决阶问题
    2.1什么是递归?
    1.用数组的方式实现列表
    如何在电脑上安装Jupyter Notebook
  • 原文地址:https://www.cnblogs.com/lingxianxia/p/4581824.html
Copyright © 2020-2023  润新知