视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
C ?ЩС??
2025-09-25 23:25:54 责编:小OO
文档
1.printf()是打印到输出屏幕上

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()创建弹出菜单下载本文

显示全文
专题