VC++知识点整理

Wesley13
• 阅读 543

1.内联函数

定义:定义在类体内的成员函数,即函数的函数体放在类体内

特点:在调用处用内联函数体的代码来替换,用于解决程序的运行效率问题。一定要在调用之前定义,并且内联函数无法递归调用。

2.构造函数 与 析构函数

构造函数:用于为对象分配内存空间,对类的成员变量进行初始化,并执行其他内部管理操作。可以接受参数,但不能有返回值。并允许重载

析构函数:用于释放分配给内存对象的空间。没有参数,没有返回值,也不允许重载。一个类中只能有个析构函数。

3.函数重载 与 操作符重载

函数重载

定义:同一个函数名可以对应着多个函数的实现。函数重载允许在一个程序内声明多个名称相同的函数,这些函数完成不同的功能,并带有不同类型、不同数目的参数及返回值。使用函数重载可以减轻用户的记忆负担,病史程序的结构简单、易懂。

要求:函数间的 参数个数或参数类型 不同

操作符重载

目的:增强了C++语言的可扩展性,为C++中已有的操作符赋予新的功能。

4.友元

目的:允许类外的函数或其他类具有访问该类的私有部分的特权,用Friend_加类或函数 表示一个“友元”

要求:友元类必须在它被定义前声明

派生类的访问控制由访问属性来确定,它按下述方式来继承基类的访问属性:

  1. 1. 如果访问属性为public,则基类的public是派生类的protected成员;积累的private成员对派生类是不可访问的(除非基类中声明的友元函数授权访问);基类的protected成员对派生类仍保持protected属性
  2. 2. 如果访问属性为protected,则基类的public和protected成员均是派生类的protected成员;基类的private成员对派生类是不可访问的(除非积累中声明的友元函数授权访问);
  3. 3. 如果访问属性为private,其基类的public和protected成员都是派生类的private成员;积累的private成员对派生类是不可访问的(除非积累中声明的支元函数授权访问)。也就是说,当访问属性为private时,派生类的对象不能访问基类中以任何方式定义的成员函数。
  4. 4. 基类名可以为一个,也可为多个,一个基类,则这种继承方式称为简单继承。,如果为多个,则继承方式称多重继承,各个基类用逗号隔开。

5.多态性和虚拟函数

多态性:“一种接口,多种方法”,使用同样的函数名而定义不同的函数操作。“运算符重载”和“函数重载”是编译时的多态性,也成为“静态多态性”;运行时的多态性则称为“动态多态性”,通过“虚拟函数”来完成。

虚拟函数:在基类中用Visual说明,在积累中只能用一次。通过用给一个指针变量指向基类或派生类来实现多态。

Unit 2

Windows进vc++开发面向对象应用程序时,使用了Windows API函数(面向过程)和MFC类库(面向对象)两种方式

6.窗口

定义:是Windows应用程序基本的操作单元,是应用程序与用户之间交互的基本环境,也是系统管理应用程序的基本单位。

7.句柄

定义:指Windows使用的一个唯一的PVOID的数据,是一个4字节长的数值。

 VC++知识点整理

9.    windows中的消息由三部分组成:消息号、字参数和长字参数

10.入口函数winmain具有什么功能?

  1. 1. 注册窗口类,建立窗口及执行其他必要的初始化工作
  2. 2. 进入消息循环,根据从应用程序消息队列接受的消息,调用相应的处理过程。
  3. 3. 消息循环检索到WM_QUIT消息时中止程序运行

11.窗口函数wndProc具有什么功能?

Windows应用程序使用 图形设备接口和Windows设备驱动程序 来支持与设备无关的图形。

Unit 4

 VC++知识点整理

12. BeginPaint与GetDC区别

 VC++知识点整理

13. 三种映射模式:MM-TEXT映射;MM_ANISOTROPIC映射和MM_ISOTROPIC映射

14. 画笔、画沙的创建、选入设备环境、删除

VC++知识点整理

VC++知识点整理

VC++知识点整理

windows使用宏RGB定义绘图的颜色,其形式为:RGB(nRed,nGreen,nBlue)

15. InvalidateRect – 刷新无效矩形区域

unit 5

16. 文本格式化

1.在文本行中确定后续文本的坐标 2.换行时确定下一行文本的坐标

17. textout函数(文本输出函数)

VC++知识点整理

18.键盘消息有哪几种,?

按键消息 和 字符消息;

19. 产生字符消息的键是哪些?

任何可读字符,BACKSPACE,回车,ESC,TAB

20.鼠标消息

WM_MOUSEMOVE中

X = LOWORD(IParam) ---低字节 Y = HIWORDC(IParam) ---高字节

lParam参数包含鼠标光标位置;wParam参数包含一个指示各种虚键状态

CS_DBLCLKS属性,定义方式如下:

Wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS

21、会读会写常见的资源脚本;一个加速键的资源脚本;画出对应的资源式菜单;

 VC++知识点整理

VC++知识点整理

VC++知识点整理

VC++知识点整理

VC++知识点整理

VC++知识点整理

VC++知识点整理

VC++知识点整理

VC++知识点整理

VC++知识点整理

VC++知识点整理

VC++知识点整理

22、位图及其位图使用步骤:(选择性使用)

答:由于处理的数据量比较大,位图操作必须在内存中进行,用于位图操作的系统设备环境为内存设备环境;

应用程序首先要通过调用函数CreateCompatibleDC向系统申请获取内存设备环境,此内存设备环境与输出设备的设备环境hdc互相兼容,其形式是:hdcmen=CreateCompatibleDC(hdc);

与设备环境相似,内存设备环境也有设备描述表,应用程序获取内存设备环境后,调用函数SelectObject将位图文件内容选入内存设备环境后,即可直接在内存设备环境中操作位图,但是前提是需要对内存设备环境进行初始化,否则不能直接绘图。使用CreatCompatibleBitmap创建空位图,将其选入内存设备环境,等到绘图结束,在使用BitBlt函数将内存设备环境复制到屏幕。

操作位图结束后,应用程序须调用DeleteDC释放内存设备环境,其形式为:

DeletDC(hdcmem);//hdcmem为内存设备环境句柄

23、对话框的主要形式;两者区别;及对话框处理特点;构造对话框处理函数;(选择性使用)

答:对话框是一个弹出式窗口,它一般用于程序需要用户输入或者需要和用户进行交互活动的场合。对话框的主要形式有:模式对话框、非模式对话框;

模式对话框不允许用户在关闭对话框之前切换到应用程序的其他窗口,当一个模式对话框初始化是,对话框的消息循环将处理消息,但并不返回给WinMain函数。

非模式对话框允许用户在该对话框与应用程序其他窗口之间的切换,即对话框和其他应用程序的窗口之间进行来回切换。非模式对话框从WinMain函数的消息循环中接收输入。使用模式对话框还是非模式对话框,取决于应用程序及其实现。

对话框资源有如下功能:发送消息如警告消息、提示框消息;接收输入如用户输入的消息;提供消息如常见的“关于”对话框。

对话框消息处理函数的一般形式:

BOOL  CALLBACK  DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM 1Param)

{

switch(message)

{

Case WM_INITDIALOG;

return 1;

case WM_COMMAND

switch(LOWORD(wParam))

{

case…

break;

case…

break;

}

break;

}

return 0;

}

 VC++知识点整理

24、创建一个单文档或者多文档;产生几个类;这几类做什么事;

VC++知识点整理

VC++知识点整理

25.常见的全局成员函数

VC++知识点整理

使用MFC的4个步骤

1.在程序界面中增加控件方法 2.为控件添加映射消息 3.在应用程序中使用控件 4.自定义控件类

典型的控件使用(按钮、滚动条编辑框如何进行消息响应)

(1)用AppWizard创建一个MFC.exe项目。(2)设置控件及其属性。(3)为控件添加成员变量

编辑框使用:(1)建立基于对话框的MFC应用程序。(2)建立对话框中各个控件。(3)修改各个控件的属性值。(4)增加相关控件的变量和消息映射项。(5)编写消息处理函数的代码。

编辑框与应用程序间的消息传递:应用程序创建编辑框控件后,可通过接受控件发出的消息得知用户的请求,并可通过向编辑框发送消息对其进行操作。P213

  1. 1. 编辑框向应用程序发送消息:编辑框通过向其父窗口发送WM_COMMAND消息通知应用程序用户的交互信息。该消息自参数(wParam)的低字节为控件标识;高字节为标识编辑框动作的消息通知码。
  2. 2. 应用程序向编辑框发送消息:应用程序对编辑框的操作通过调用函数SendMessage或SendDlgItemMessage向其发送各种消息完成。

26.在MFC中创建应用程序的资源。例10-1,P262

手工加入ON_UPDATE_COMMAND_UI_RANGE宏(实现若干菜单项的状态更新)。

在My_resView.h中加入代码:

afx_msg void OnUpdateOperColorChange(CCmdUI * pCmdUI);

在My_resView.cpp中加入如下代码:

ON_UPDATE_COMMAND_UI_RANGE(ID_OPER_RED, ID_OPER_BLUE, OnUpdateOperColorChange)

在My_resView.cpp的最后加入如下代码来实现该函数:

Void CMy_resView::OnUpdateOperColorChange(CCmdUI * pCmdUI)

{

pCmdUI->SetRadio(m_nColorIndex==(pCmdUI->m_nID-ID_OPER_RED));

}

27 单文档应用程序的消息传递过程

DefWindowProc

VC++知识点整理

应用程序对象

VC++知识点整理

框架窗口 文档模板

VC++知识点整理                 VC++知识点整理

活动视图 文档对象

28 文档模板类CDocTemplate 该类的作用:

**文档模板类CDocTemplate将原本独立的文档、视图和框架窗口对象联系在一起。CDocTemplate类提供了文档类所需要的最基本的功能实现,它提供的方法分别是一般方法和虚拟方法,虚拟方法使应用程序可以重写它们来提供CDocTemplate派生类中的方法。

**

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
C++ 析构函数与内存池
CPrimer书中也提到编写class时要注意copycontrol成员(拷贝构造函数,赋值操作符,析构函数,C11又多个移动构造函数)。工作时在C和C之间切换,有时就忘记了C的细节(真的好讨厌)。C析构函数与构造函数对应,构造对象时调用构造函数,析构对象时调用析构函数,于是可以在对象的析构函数中释放资
Stella981 Stella981
3年前
C++primer学习笔记(六)
1.virtual函数是基类希望派生类重新定义的函数,希望派生类继承的函数不能为虚函数。根类一般要定义虚析构函数。2.派生类只能通过派生类对象访问protected成员,不能用基类对象访问。基类定义为virtual就一直为虚函数,派生类写不写virtual都是虚函数。用做基类的类必须是已定义的。3.存在虚函数指针或引用
Wesley13 Wesley13
3年前
C++基类的析构函数定义为虚函数的原因
1:每个析构函数只会清理自己的成员(成员函数前没有virtual)。2:可能是基类的指针指向派生类的对象,当析构一个指向派生类的成员的基类指针,这时程序不知道这么办,可能会造成内存的泄露,因此此时基类的析构函数要定义为虚函数;基类指针可以指向派生类的对象(多态),如果删除该指针delete\\p,就会调用该指针指向的派生类的析构函数,而派生类
Stella981 Stella981
3年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
3年前
C++中构造函数和析构函数
构造函数定义它是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。另外,一个类可以有多个构造函数,我们可以根据其参数个数的不同或参数类型的不同来区分它们(这就是构造函数的重载)特点1.构造函数的命名必须和类名完全相同;2.构造函数的功能主要用于在类的对象创建时定义
Wesley13 Wesley13
3年前
C++ 类与结构体 构造函数 详细相关理解整理
说到构造函数,通常是将讲对象创建时编译器自动调用构造函数为对象初始化,也可以说是分配内存空间。 学习了构造函数相对其中牵涉到的一些点作下大概的了解和学习,整理一下只是点。这里主要说下 类与结构体的差异/类与结构体包含继承关系时的构造调用/类的初始化列表/默认构造函数/拷贝构造函数以及牵涉到的相关内容结构体和类的区别
小万哥 小万哥
7个月前
C++ 构造函数实战指南:默认构造、带参数构造、拷贝构造与移动构造
C构造函数构造函数是C中一种特殊的成员函数,当创建类对象时自动调用。它用于初始化对象的状态,例如为属性分配初始值。构造函数与类同名,且没有返回值类型。构造函数类型C支持多种类型的构造函数,用于满足不同的初始化需求:默认构造函数:不带参数的构造函