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中写


原文地址:https://www.cnblogs.com/lingxianxia/p/4581824.html