sprintf(schar,”char is%d”,xparm)是将xparm按%d方式格式化数组schar中。
2.得到一个句柄,一定要释放掉,防止内存泄露
3.BeginPaint——EndPaint只能在WM_Paint中使用
4.在做if判断时,要将常量写在前面if(1==x)防止等号写一个
5.destroywindow,销毁窗口
6.postquitmessage()请求线程停止退出,判断getmessage(),如果返回为0,则wihle
(getmessage)终止
7.消息循环的语句,default是必不可少的,对不敢兴趣的窗口事件进行默认选择
8._stdcall和cdecl
9.控制台程序的入口函数是winmain,MFC的入口函数是winApp,通过连接winmain而开始
的,而所有这些之前还有第一个执行的就是全局变量、对象——构造函数——winmain。
10.每一个MFC的程序当中,有且只有一个从CWinApp所派生出来的类,如CTestApp;也
有且仅有一个应用程序类CTestApp实例化的对象theApp.
11.在程序以及运行时初始化的问题在CwinApp中的构造中完成了;
12.前面带Afx的函数属于程序框架的函数,此程序框架是一套辅助生成应用程序的模型,
可以根据它设计自己的应用程序,application framework;
13.createStructure和createwindow
14.设计窗口类(在MFC程序中已经由MFC设计好了,剩下的只是注册,)——注册窗口类
(单文档是在Cframemain前注册,使用***endRegitclass)——创建窗口(createwindow)-显示-更新-消息循环(CWindThread::Run)消息循环基于do{}...while(),在线程中使用;
15.C++中,结构体和类是可以通用的,结构体也是一种特殊的类,只是有struct定义的,
有一点区别,在访问控制方面,类的默认是私有成员,都不可以在外部被访问;struct 的所有成员都是共有的,都可以在外部被访问。除此之外,各个是可以通用的。
16.class point
{
Public;
Int x;
Int y;
}
Point pt;
Pt是point类的对象,或者是实例化的对象
17.-8593460,这个负数,定义的成员变量,初始内存中的随即值
18.构造函数:point(){}构造函数和类名一样,没有返回值,可以初始化变量;最重要的作
用是创建对象本身。C++规定:每一个类必须要有一个构造函数,否则不能创建任何一个对象。如果一个类没有提供任何一个构造函数,则默认创建一个不带任何参数的构造参数,它只负责创建对象,而不做任何初始化工作。
19.析构函数:构造函数的取反,~point(){},释放内存;析构函数不允许有返回值,不允许带参数,并且一个类中不能有多个析构函数
20.函数的重载:point(){};point(int a,int b){x=a;y=b}
条件:函数的参数类型不同,参数个数不同
21.继承
Class Animal{public:.};class fish:public animal(类的继承特性还有protected和private)父类的public的成员,在子类内部可以调用,在外部就也可以调用
父类的protect的成员,在子类内部可以调用,在外部就不可以调用了
父类的private的成员,在子类内部、外部都不可以调用
22.子类调用构造函数之前,先执行父类的构造函数,再执行子类的构造函数;
如果父类的构造函数有参数,子类也要在构造函数后加上父类构造函数的参数
父类
Class animal
{
Public:
Animal(int height,int length)
{
Count<<””< ~Animal() { Count<<””< }; 子类的构造函数:要加上animal及参数,如果父类构造函数没有参数,直接fish(){}即可Class fish:public animal { Fish():animal(300,400) }; 23.函数的覆盖:发生在子类与父类之间 覆盖后执行的是子类的函数。如果非要再使用父类的函数,可以在子类的同名函数下,调用父类这个函数,for example: Son:Breath { Father::breath(); } 24.C++的多态性 当C++编译器在编译的时候,发现Animal类的breath()函数是虚函数,这个时候C++就会采用迟绑定(late binding)技术,在运行时,依据对象的类型(在程序中,我们传递fish 类的对象的地址)来确认调用的那个函数,这种能力就叫多台基类相应函数前加上vitual虚函数,子类有的调用子类的,没有的就调用基类的。 25.纯虚函数vitual void breath()=0; 含有纯虚函数的类叫做抽象类,抽象类是无法实例化对象的。子类也变成抽象类,除非子类把虚函数实现()了。 纯虚函数的用处:父类不确定这个成员函数在子类中如何应用,所以做成纯虚函数,让纯虚函数在子类中实现自己的特性(不同的对象实现的不一样,睡觉:马,蝙蝠,鱼的方式就不同)。 26.C++中的引用:变量的别名。Int a;&b=a;必须在定义引用的时候初始化 &只有在定义的时候使用才为引用,在其他的放使用是为取地址符号 引用不需要内存地址,而指针需要 通常引用用在传参中,更加清晰 27.头文件 Cpp引用”xx.h”在当前目录下查找和 28.预编译指令符:#ifndef XXXXX CLASS Cm_H #define XXXXX #endif 防止头文件中的类的重复定义,在*.h中的类中使用;避免重复定义; 29.MFC类 全局变量,全局对象,在执行main函数前,已经为其分配了内存空间。 作为应用程序所需要的几个步骤: 设计窗口类——注册窗口类——创建串口——显示窗口——更新窗口——消息循环——消息处理函数 所谓“消息循环”,实际是程序循环。 Initinstance 30.MFC框架的形成过程 1)声明全局对象:CTestApp theApp;//若没有全局对象的声明,即使编译不出错, 运行也会出错; 2)调用构造函数:当定义全局对象时会调用构造函数来产生全局对象,当构造子类的 构造函数时,先调用基类或父类的构造函数(CWinApp,在构造CWinApp过程中 完成了一些应用程序初始化的工作,同时将子类的指针保存起来,保存起来之后, 进入到WinMain函数); 3)在WinMain函数中可以获取到子类的指针,利用子类的指针调用虚拟的函数,根 据多态性的原理,相应的就会调用到子类里面的函数,也就是我们的InitInstance; 4)在InitInsane中完成了应用程序的一些初始化的过程,包括窗口类的注册、创建、 显示、更新等等。(registclass、precreate、); 5)消息循环:此处做了消息映射处理。 31.CTestApp通过单文档类CsingleDoctemplate()模板将doc,view,mainframe有机的组合在一 起。 32.MFC的各类:应用程序类(APP),主框架类(MainFrameWork),视类(View),文档类(Doc); 文档视类是指的文档与视图的结合,文档类是对数据的存储,不对其显示,而视类是对数据的显示、修改,由此将数据本身和数据的显示、处理进行分离; 33.句柄:返回某个函数创建窗口的一个标识。 34.(1)C++当中,MFC的对象和窗口之间的关系,窗口销毁了,对象还可以在;对象不 存在了,窗口也就销毁了;关系:C++对象内部定义了一个窗口句柄,句柄保存了和对象相关的窗口句柄。 (2)窗口需要做初始化,而对象可以直接引用 35.(1)全局函数的使用方法之一,如果调用函数时,在::冒号前没有添加任何东西,表示 使用的函数是全局函数。比如::showwindow(***).全局API 在程序中如果直接使用一个函数,而之前并没有加:“::”说明是一个全局函数。 (2)在类中调用函数时,如果调用的函数名和类中的成员函数名不一致的话,不需要加:: 表示全局变量。如果一致的话,需要加::表示全局函数。 Eg BOOL showwindow(int nCmdShow) { Return::showwindow(m_wnd,nCmdShow); } 36.注释宏:MFC中的对消息的处理机制是消息映射 在头文件中函数的声明 //{{AFX_MSG(CPrinterdemoDlg) 里面的数据是灰色显示 afx_msg void OnButton3();消息响应函数 //}}AFX_MSG DECLARE_MESSAGE_MAP() 在源文件中函数的也有一个注释宏,用来响应这个动作 BEGIN_MESSAGE_MAP(CPrinterdemoDlg,CDialog) //{{AFX_MSG_MAP(CPrinterdemoDlg) ON_BN_CLICKED(IDC_BUTTON3,OnButton3) //}}AFX_MSG_MAP ON_EN_CHANGE(IDC_EMPTY_SPEED,OnEnChangeEmptySpeed) ON_EN_CHANGE(IDC_LINE_SPEED,OnEnChangeLineSpeed) ON_EN_CHANGE(IDC_BACK_SPEED,OnEnChangeBackSpeed) ON_BN_CLICKED(IDC_BUTTON11,OnBnClickedButton11) ON_BN_CLICKED(IDC_RADIO_MODELA,OnBnClickedRadioModela) ON_BN_CLICKED(IDC_RADIO_MODELB,OnBnClickedRadioModelb) ON_BN_CLICKED(IDC_RADIO_MODELC,OnBnClickedRadioModelc) ON_BN_CLICKED(IDC_BUTTON_ReverseX,OnBnClickedButtonReversex)ON_BN_CLICKED(IDC_BUTTON_ReverseY,OnBnClickedButtonReversey) ON_BN_CLICKED(IDC_BUTTON_ReversePen,OnBnClickedButtonReversepen) ON_EN_CHANGE(IDC_TEXT_BHXHSPACE,OnEnChangeTextBhxhspace) ON_BN_CLICKED(IDOK,OnButton11) END_MESSAGE_MAP() 37.将句柄转化为对象或对象的指针使用;FromHandle(Cbrush的一个函数特性) 38.4-80非静态>静态 而不加static的函数(即非静态函数),如果不通过对象访问,则不会给其分配代码区。 在非静态的方法下,可以调用静态的成员函数。 非静态下,成员变量和成员函数本身是没有内存空间的 pubic下的方法在static后声明的函数,并不属于某一个类的对象,而是属于类本身,是在类加载时已经给其方法分配了代码区了 静态下,成员变量和成员函数本身是有内存空间的 在静态的方法下调用非静态的成员变量,会出错。因为静态下已经分配好空间。 静态成员变量在使用时,需要在类外部进行初始化int point::x=0;int point::y=0 39.鼠标移动消息: Move? 40.CString类 (1)最常用的就是CString str(“1234”);或CString str;str=”1234”; (2)方法:loadstring;str.loadstring(ID);可以加载此ID个str; 41.CSize GetTextExtent(const CString&str)const;获取针对不同字符串的占用空间定义GetTextmetrics()针对单个字符的; GetTextMetrics:获取当前字体的信息 GetTextExtent:获取特定的字符串在屏幕上所占的宽度和高度 42.路径程 pDC->BeginPath(); pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);pDC->EndPath(); pDC->SelectClipPath(RGN_DIFF); 43.setcaretpos(point)将光标移动至point点处 44.Messagebox消息框的用法是在CWnd的子类中的应用,三个参数,不需要句柄, 是MessageBox("一种常用的应用 如果不是,则要 MessageBox(NULL,"ddd 45.CEditview和CRichview类更丰富 46.drawtext函数,可以实现平滑的变色效果; 47.settimer定时器; 48.变量初始化 c++各种不同类型成员根据是否static、时候const类型的初始化方法不尽相同, (1)-(6)描述的是在类内部初始化,必须是静态常量整型成员才可以初始化; 普通变量的初始化需要在构造函数中初始化; (1)static const int var4=4444;//正确,静态常量成员可以直接初始化 (2)static int var3333=33333;错误,只有静态常量成员才能直接赋值来初始化 (3)const int var22=22222;错误的初始化方法 (4)int var11=4;错误的初始化方法 (6)static const double csd2=99.9;//error:只有静态常量整型数据成员才可以在类中初始化 (7)静态成员变量的初始化,是在类外部初始化,并且在类内部已经定义过了//静态成员变量的初始化(Integral type) int BClass::si=0; //静态常量成员变量的初始化(Integral type) const int BClass::csi=1; //静态常量成员变量的初始化(non-Integral type) const double BClass::csd=99.9; 49.指针数组和数组指针 指针数组在定义是char*strp=new char[n];如果strp有10个字符,则n要为11,因为还有一个结束符’0’; 50.CMainFrame是从CWind类派生而来,所以MessageBox函数可以直接使用; 51.消息的分类 标准消息:出WM_COMMAND之外,所有以WM_开头的消息。行CWind派生的类,都可以接收到这类消息;并且也可以接收以下两种消息(命令消息、通告消息)命令消息:来自菜单、加速键或工具栏按钮的消息。这类消息都已WM_COMMMAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。 从CCmdTarget派生的类,都可以接收到这类消息。 通告消息:有控件产生的消息,如:按钮的单机,列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现。 从CCmdTarget派生的类,都可以接收到这类消息。 52.子菜单项的访问,可以通过标识(ID号)进行访问,也可以使用索引进行访问; (1)通过ID号访问 Getmenu()->GetsubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND| MF_CHECKED); (2)通过索引访问 Getmenu()->GetsubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED); 上面的‘0’是子菜单的标识 (3)缺省菜单,初体显示 GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE); 一个子菜单中只有一个缺省菜单,以最后一个为准。 53.在定义类的成员变量时,一定要注意定义的位置,有些变量执行后,直接被析构了,所 以需要在类的头文件中定义 54.printf:格式化输出到控制台上 sprintf:格式化输出到一个buffer中国CString str;str.format(“x=%d,y=%d”,m,n),m,n已知,格式化到str中 55.Setmenu(); Menu.detch();销毁菜单的句柄 56.文本输出,使用CClientDC dc(); dc.textout() 窗口重绘:invalidate(),让整个客户端区域无效,下次就会更新 57.CString Find函数,可以查找一个字符,返回此字符的位置 58.对于动态增加的数组,可以通过链表的方式来实现,但比较麻烦和复杂。在MFC中提 供了一些集合类,类似于数组的功能,但可以动态增加。利用CstringArray集合类,CobtAarry也可以范围大。 59.源文件单独参与编译 60.SDK获取到的一般是句柄,而MFC获取到的是指针 CreatePopupMenu创建空的弹出菜单。和menu菜单相连 Appendmenu()创建弹出菜单下载本文