math.h数学函数库 ctype.h函数

math.h  数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有:

1、 三角函数

double sin (double);正弦

double cos (double);余弦

double tan (double);正切

2 、反三角函数

double asin (double); 结果介于[-PI/2, PI/2]

double acos (double); 结果介于[0, PI]

double atan (double); 反正切(主值), 结果介于[-PI/2, PI/2]

double atan2 (double, double); 反正切(整圆值), 结果介于[-PI, PI]

3 、双曲三角函数

double sinh (double);

double cosh (double);

double tanh (double);

4 、指数与对数

double exp (double);求取自然数e的幂

double sqrt (double);开平方

double log (double); 以e为底的对数

double log10 (double);以10为底的对数

double pow(double x, double y);计算以x为底数的y次幂

float powf(float x, float y); 功能与pow一致,只是输入与输出皆为浮点数

5 、取整

double ceil (double); 取上整

double floor (double); 取下整

6 、绝对值

double fabs (double);求绝对值

double cabs(struct complex znum) ;求复数的绝对值

7 、标准化浮点数

double frexp (double f, int *p); 标准化浮点数, f = x * 2^p, 已知f求x, p ( x介于[0.5, 1] )

double ldexp (double x, int p); 与frexp相反, 已知x, p求f

8 、取整与取余

double modf (double, double*); 将参数的整数部分通过指针回传, 返回小数部分

double fmod (double, double); 返回两参数相除的余数

9 、其他

double hypot(double x, double y);已知直角三角形两个直角边长度,求斜边长度

double ldexp(double x, int exponent);计算x*(2的exponent次幂)

double poly(double x, int degree, double coeffs [] );计算多项式

nt matherr(struct exception *e);数学错误计算处理程序

source: 《C & C++ Code Capsules》

ctype.h  ctype.h里的函数

1 字符测试函数   1> 函数原型均为int isxxxx(int)

2> 参数为int, 任何实参均被提升成整型

3> 只能正确处理处于[0, 127]之间的值

2 字符映射函数

1> 函数原型为int toxxxx(int)

2> 对参数进行检测, 若符合范围则转换, 否则不变

int tolower(int); 'A'~'Z' ==> 'a'~'z'

int toupper(int); 'a'~'z' ==> 'A'~'Z'

@函数名称: isalpha

函数原型: int isalpha(int ch);

函数功能: 检查ch是否是字母.

函数返回: 是字母返回非0 ,否则返回 0.

参数说明:   所属文件 <ctype.h>

#include <stdio.h>

#include <ctype.h>

int main()

{

char ch1='*';

char ch2='a';

if(isalnum(ch1)!=0)

printf("%c is the ASCII number or alphebet\n",ch1);

else   printf("%c is not the ASCII number nor alphebet\n",ch1);

if(isalnum(ch2)!=0)

printf("%c is the ASCII number or alphebet\n",ch2);

else   printf("%c is not the ASCII number nor alphebet\n",ch2);

return 0;

}

@函数名称: iscntrl

函数原型: int iscntrl(int ch);

函数功能: 检查ch是否控制字符(其ASCII码在0和0x1F之间,数值为 0-31).

函数返回: 是返回 1,否则返回 0.

参数说明:

所属文件: <ctype.h>

#include <stdio.h>

#include <ctype.h>

char chars[]={'A',0x09,'Z'};

#define SIZE sizeof(chars)/sizeof(char)

int main()

{

int i;

for(i=0;i<SIZE;i++)

{

printf("Char %c is %sa Control character\n",

chars[i],(iscntrl(chars[i]))?"":"not");

}

return 0;

}

@函数名称: isdigit

函数原型: int isdigit(int ch);

函数功能: 检查ch是否是数字(0-9)

函数返回: 是返回1,否则返回0

参数说明:

所属文件: <ctype.h>

#include <stdio.h>

#include <ctype.h>

int main()

{

char ch1='1';

char ch2='a';

if(isdigit(ch1)!=0)

printf("%c is the ASCII number\n",ch1);

else   printf("%c is not the ASCII number\n",ch1);

if(isdigit(ch2)!=0) printf("%c is the ASCII number\n",ch2);

else   printf("%c is not the ASCII number\n",ch2);

return 0;

}

@函数名称: isgraph

函数原型: int isgraph(int ch);

函数功能: 检查ch是否可显示字符(其ASCII码在ox21到ox7E之间),不包括空格

函数返回: 是返回1,否则返回0

参数说明:

所属文件: <ctype.h>

#include <stdio.h>

#include <ctype.h>

int main()

{

char ch1=' ';

char ch2='a';

if(isgraph(ch1)!=0) printf("%c is the ASCII printable character\n",ch1);

else   printf("%c is not the ASCII printable character\n",ch1);

if(isgraph(ch2)!=0)

printf("%c is the ASCII printable character\n",ch2);

else   printf("%c is not the ASCII printable character\n",ch2);

return 0;

}

@函数名称: islower

函数原型: int islower(int ch);

函数功能: 检查ch是否小写字母(a-z)

函数返回: 是返回1,否则返回0

参数说明:

所属文件: <ctype.h>

#include <stdio.h>

#include <ctype.h>

char chars[]={'A','a','z','Z'};

#define SIZE sizeof(chars)/sizeof(char)

int main()

{

int i;   for(i=0;i<SIZE;i++)

{   printf("Char %c is %sa lowercase character\n",chars[i],(islower(chars[i]))?"":"not");

}

return 0;

}

@函数名称: tolower

函数原型: int tolower(int ch);

函数功能: 将ch字符转换为小写字母

函数返回: 返回ch所代表的字符的小写字母

参数说明:

所属文件: <ctype.h>

#include <stdio.h>

#include <stdlib.h>

#include <ctype.h>

int main()

{

char x='a', y='b',z='A',w='*';

printf("Character %c to lower is %c\n",x,tolower(x));

printf("Character %c to lower is %c\n",y,tolower(y));

printf("Character %c to lower is %c\n",z,tolower(z));

printf("Character %c to lower is %c\n",w,tolower(w));

return 0;

}

@函数名称: toupper

函数原型: int toupper(int ch);

函数功能: 将ch字符转换成大写字母

函数返回: 与ch相应的大写字母

参数说明:

所属文件: <ctype.h>

#include <stdio.h>

#include <stdlib.h>

#include <ctype.h>

int main()

{

char x='a', y='b',z='A',w='*';

printf("Character %c to upper is %c\n",x,toupper(x));

printf("Character %c to upper is %c\n",y,toupper(y));

printf("Character %c to upper is %c\n",z,toupper(z));

printf("Character %c to upper is %c\n",w,toupper(w));

return 0;

}

@函数名称: isalnum

函数原型: int isalnum(int ch);

函数功能: 检查ch是否是字母或数字

函数返回: 是字母或数字返回1,否则返回0

参数说明:

所属文件: <ctype.h>

#include <stdio.h>

#include <ctype.h>

int main()

{

char ch1 ='*';

char ch2 ='a';

if(isalnum(ch1)!=0)   printf("%c is the ASCII number or alphebet\n",ch1);

else   printf("%c is not the ASCII number nor alphebet\n",ch1);

if(isalnum(ch2)!=0)   printf("%c is the ASCII number or alphebet\n",ch2);

else   printf("%c is not the ASCII number nor alphebet\n",ch2);

return 0;

}

@函数名称: isprint

函数原型: int isprint(int ch);

函数功能: 检查ch是否是可打印字符(包括空格),其ASCII码在ox20到ox7E之间

函数返回: 是返回1,否则返回0

参数说明:

所属文件: <ctype.h>

#include <stdio.h>

#include <ctype.h>

int main()

{

char ch1='\n';   char ch2='a';

if(isprint(ch1)!=0)

printf("%c is the ASCII printable charcater\n",ch1);

else   printf("%c is not the ASCII printable charcater\n",ch1);

if(isprint(ch2)!=0)   printf("%c is the ASCII printable charcater\n",ch2);

else   printf("%c is not the ASCII printable charcater\n",ch2);

return 0;

}

@函数名称: ispunct

函数原型: int ispunct(int ch);

函数功能: 检查ch是否是标点字符(不包括空格),即除字母,数字和空格以外的所有可打印字符   函数返回: 是返回1,否则返回0   参数说明:   所属文件:

<ctype.h>   #include <stdio.h>   #include<ctype.h>   int main()   {   char ch1=',';   char ch2='a';   if(ispunct(ch1)!=0)   printf("%c is the ASCII punct\n",ch1);   else   printf("%c is not the ASCII punct\n",ch1);   if(ispunct(ch2)!=0)   printf("%c is the ASCII punct\n",ch2);   else   printf("%c is not the ASCII punct\n",ch2);   return 0;   }   @函数名称: isspace   函数原型: int isspace(int ch);   函数功能: 检查ch是否是空格符和跳格符(控制字符)或换行符   函数返回: 是返回1,否则返回0   参数说明:   所属文件: <ctype.h>   #include <stdio.h>   #include <ctype.h>   int main()   {   char ch1=' ';   char ch2='a';   if(isspace(ch1)!=0)   printf("%c is the space charcater\n",ch1);   else   printf("%c is not the space charcater\n",ch1);   if(isspace(ch2)!=0)   printf("%c is the space charcater\n",ch2);   else   printf("%c is not the space charcater\n",ch2);   return 0;   }   @函数名称: isupper   函数原型: int isupper(int ch);   函数功能: 检查ch是否是大写字母(A-Z)   函数返回: 是返回1,否则返回0   参数说明:   所属文件: <ctype.h>   #include <stdio.h>

#include <ctype.h>

char chars[]={'A','a','z','Z'};

#define SIZE sizeof(chars)/sizeof(char)

int main()

{

int i;   for(i=0;i<SIZE;i++)

{

printf("Char %c is %san uppercase character\n",

chars[i],(isupper(chars[i]))?"":"not");

}

return 0;

}

@函数名称: isxdigit

函数原型: int isxdigit(int ch);

函数功能: 检查ch是否是一个16进制数学字符(即0-9,或A-F,或a-f)

函数返回: 是返回 1,否则返回0

参数说明:

所属文件: <ctype.h>

#include <stdio.h>

#include <ctype.h>

int main()

{

char ch1='1';

char ch2='a';

if(isxdigit(ch1)!=0)

printf("%c is the ASCII hexadecimal number\n",ch1);

else   printf("%c is not the ASCII hexadecimal number\n",ch1);

if(isxdigit(ch2)!=0)

printf("%c is the ASCII hexadecimal number\n",ch2);

else

printf("%c is not the ASCII hexadecimal number\n",ch2);

return 0;

}

@函数名称: isascii

函数原型: int isascii(int ch)

函数功能: 测试参数是否是ASCII码0-127

函数返回: 非零-是,0-不是

参数说明: ch-被测参数

所属文件: <ctype.h>

#include <stdio.h>

#include <ctype.h>

char chars[]={'A',0x80,'Z'};

#define SIZE sizeof(chars)/sizeof(char)

int main()

{

int i;

for(i=0;i<SIZE;i++)

{

printf("Char %c is %san ASCII character\n",

chars[i],(isascii(chars[i]))?"": "not");

}

return 0;

}

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,

目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又

无需访问源码,或理解内部工作机制的细节。

AppWizard

Application

在VC++中,app是应用程序的入口和出口,一般在这里处理一些启动和退出程序时

需要读取或写入的设置信息,还有设置一些全局变量。

是用类别名称和源程序名产生 Windows 应用程序的一个工作向导,整装

了程序并作成向导的程序产生器。当你想要制作一些程序的时候,你便会用到 App

Wizard并能了解到它用途的广泛性。 不要把 AppWizard 和一个应用程序所产生的所

有程序源码和产生器所生成的源程序弄混。AppWizard 生成的源码是在功能性应用

程序框架里基础类别的最低限度要求。AppWizard 将帮助你很快地开始一个新的

应用程序。   高级开发者可以建立订制的 AppWizards。微软公司已经为使用者

透漏了它的后台程序源码以供程序员使用。你可以根据你编程的需要重新设计一个

新的设计规划以建立一个特别的自动化程序模型。

Class Wizard

从字面上看,Class是类的意思,而Wizard则是"智者"的意思,两者合起来,

ClassWizard的意思就是智能地操作类的工具,通常被称作"类向导"。

在Visual C++ 6.0的集成开发环境中,ClassWizard最能体现它的特征。与AppWizard

类似,ClassWizard也能自动生成程序代码,只是两者生成的对象不同,AppWizard

主要用来创建应用程序的框架,而ClassWizard则主要是在应用程序框架的基础上

创建和编辑各种类。   ClassWizard既可以操作由AppWizard在应用程序框架中创

建的类,又可以操作后来由ClassWizard自己添加的类。利用ClassWizard可以很轻松

地完成一些最基本、最普通的工作,如在自己的应用程序中创建新类、映射消息为

其添加消息处理函数、覆盖虚拟函数、将对话框中的控件与某个变量相关联等。

ClassWizard只能用于使用MFC类库的应用程序中。   ClassWizard可以完成的

主要功能如下:

◆ 创建新类。这是ClassWizard最基本的用途之一。创建的新

类由一些主要的基类派生而来,这些基类用于处理Windows的消息,对一般用户

来说,这些基类已经足够了。

◆ 进行消息映射。这些消息主要和窗口、菜单、

工具栏、对话框、控件以及加速键相关联。

◆ 添加成员变量。利用ClassWizard,

可以很方便地向类中添加成员变量,并将这些成员变量与对话框或窗口中的控件

关联起来,当控件的值改变时,所对应的成员变量的值也跟着发生变化。

◆ 覆盖虚拟函数。使用ClassWizard可以方便地覆盖基类中定义的虚拟函数。

编辑本段ClassWizard操作说明

在刚进入Visual C++ 集成开发环境时,菜单项View|ClassWizard是灰化禁止的,

只有在打开一个工作区文件后,该菜单项才能正常显示,表明该选项是可用的。

首先打开以前创建的多文档应用程序FirstApp,再选择菜单项View|ClassWizard,

即可启动ClassWizard,进入ClassWizard环境,ClassWizard是一个对话框,

其中包含五个选项卡,分别为:Message Maps、Member Variables、Automation、

ActiveX Events、以及Class Info。它们针对不同的对象完成不同的任务。

  1. Message Maps选项卡   它是ClassWizard对话框中最重要的选项卡,主要完成

创建新类、添加、删除消息处理函数等任务。   该选项卡中包含了两个下拉列

表框:Project下拉列表框和Class name下拉列表框;三个列表框:Object IDs列表框、

Message列表框和Member functions列表框;一个文本信息框;四个工具按钮。

★ Project下拉列表框:该下拉列表框用于选择当前操作的项目。当当前打开的工作

区中包含多个项目文件时,用户可以从这个下拉列表框中选择将要操作的项目文件。

对于单项目工作区来说,其默认值就是项目文件。

★ Class name下拉列表框:该下拉列表框用于选择当前要操作的类。当用户在

Class name下拉列表框中选中了某个类之后,Object IDs窗口中的内容将会发生

相应的变化。

★ Object IDs列表框:该列表框用于显示当前选定类中能够产生消息的对象的ID值。

这些对象包括菜单选项、工具栏按钮选项、对话框以及各种控件等。

通常Object IDs列表框中所包含的第一个对象就是当前类名。

★ Message列表框:Message列表框中列出了对应于Object IDs列表框中所选中的当前

项可以处理的消息以及可被重写的MFC虚函数。当Object IDs列表框中选定当前类名

时,Message列表框前部分显示的是当前类所能覆盖的虚拟函数,后部分显示的是能

够处理的消息。如Object IDs列表框中选定其它对象,则Message列表框显示的就是

当前项可以处理的消息。

★ Member functions列表框:Member functions列表框中列出了在Class name下拉列表

框中所选中的当前类包含的所有成员函数。其中用字母"V"标出的是MFC虚函数,

用字母"W" 标出的是Windows消息处理函数。

★ 文本信息框:在Project下拉列表框的下方有一个文本信息框,用于显示当前选中

类的源文件,包括.h文件和.cpp文件。该文本信息框中显示的内容会随着选定类的

变化而变化。

★ Add Class按钮:该按钮用于向当前的Project中添加一个新类,新类可以是自己创建,

也可以是从已有的文件中选取。

★ Add Function按钮:该按钮用于向当前选定类中为当前选定的消息添加一个消息

处理函数。其中类是在Class name下拉列表框中选定的类;而当前消息则是在Message

列表框中选定的消息。   Add Function按钮平时是灰化禁止的,只有当用户在Message

列表框中选中某个特定的消息之后,该按钮才能正常显示,即此时才能使用。

★ Delete Function按钮:该按钮用于在当前选定的类中删除已有的成员函数。

Delete Function按钮平时是灰化禁止的,只有当用户在Member functions列表框中选中

某个消息处理函数之后,才能选择该按钮。

★ Edit Code按钮:单击该按钮将打开编辑窗口,并将光标位置自动跳到当前选定的成员

函数的源代码处。   2. Member Variables选项卡

该选项卡主要用于添加与对话框中的控件相关联的成员变量,以便程序能利用这些成员

变量与对话框中的控件进行数据交换。该选项卡与Message Maps选项卡一样,也包含

Project下拉列表框和Class name下拉列表框,分别用于选定用户操作的当前项目和当前类;

Add Class按钮用于向当前项目中添加一个新类;一个文本信息框,用于显示当前选中类

的源文件。   此外,Member Variables选项卡中还包含另一个列表框以及另外四个工具

按钮。列表框中共有3列数据,分别为:

★ Control IDs:该项显示了当前选定类中能够映射成员变量的控件的ID值。所谓能映射

成员变量的控件,就是可以使用类中的成员变量来代表某个控件,当控件发生改变时,

该成员变量的值也发生相应变化。

★ Type:该项表示成员变量的类型。

★ Member:该项表示成员变量的名字。   注意:并不是所有的类都有这些信息,

只有在选择了对话框类、有格式视图类或记录视图类时才能显示出这些信息。

★ Add Variable按钮:该按钮用于为当前选定的控件添加一个成员变量。

★ Delete Variable按钮:该按钮用于删除一个现有的成员变量。该按钮平时是灰化禁止的,

只有当用户在Control IDs列表框中选中某个成员变量以后,才能选择该按钮执行删除工作。   ★ Update Columns按钮:该按钮用于选定一个数据源,只在记录集合类中才可以使用。   ★ Bind All按钮:只适用于记录集合类,单击此按钮将把所有未绑定的记录集里的数据成员绑定到数据源的一个表中相应的列上。在默认情况下,MFC AppWizard和ClassWizard将绑定所有的列,所以很少需要使用数据绑定。如果通过删除相关的数据成员将一些或所有列取消绑定,那么在这之后还可以重新绑定它们。   3. Automation选项卡   该选项卡允许用户加入方法或属性以增强Automation功能。   4. ActiveX Events选项卡   该选项卡允许用户加入事件以支持ActiveX控件。   5. Class Info选项卡   该选项卡用于显示和设置当前选定类中的一些重要信息。

使用ClassWizard创建新类

使用ClassWizard最重要的作用就是创建新类,用户将不必手工添加创建类所需的

大量代码,只需指定一些关于新类的重要信息,ClassWizard将自动为你生成这些代码。

下面以应用程序FirstApp为例说明创建过程。步骤如下:

(1) 首先打开FirstApp的项目工作区。

(2) 点击菜单项View|ClassWizard,进入ClassWizard对话框。

(3) 在Message Maps选项卡中选择功能按钮Add Class,并从

其下拉选项栏中单击New选项,将会打开New Class对话框。

(4) 首先在Name栏中键入新类的名称,如FirstButton。此时我们将看到在下面的File name

栏中显示出ClassWizard自动为新类定义的默认文件名:FirstButton.cpp。

如果你不想要这个名字,也可以单击Change按钮对文件名进行修改。

(5) 接下来应当设定新类的基类,即该类是由什么类派生而来的。

在Base class下拉列表框中选中所需的基类名,如CButton。

(6) 如果你创建的基类需要对话框或其它资源,则应当在Dialog ID框中选择一个资源ID值。

(7) Automation组框用于设置类的自动化信息,这只适用于能够自动化的类,

即由CCmdTarget所派生的类,我们保持其默认选择None。

(8) 最后单击OK按钮结束。

至此我们已经成功地向项目中添加了一个新类FirstButton。

回到Visual C++的主窗口中,我们将发现在FirstApp的项目工作区中发生了一些变化。

打开ClassView选项卡,将看到一个新类FirstButton已经被添加到该项目的类列表中了。

同时在FirstView选项卡中将发现FirstApp项目中新增加了两个文件:FirstButton.h,

FirstButton.cpp。

使用ClassWizard添加消息处理函数

使用ClassWizard来为类添加消息处理函数,用户将不需要手工编写消息映射所需的各种消息

宏,这样大大减轻了工作量。

本节将以FirstApp应用程序为例来添加消息处理函数,处理用户在视图中的单击鼠标操作。

步骤如下:

(1) 首先打开FirstApp的项目工作区。

(2) 点击菜单项View|ClassWizard,进入ClassWizard对话框。

(3) 选择Message Maps选项卡,在Project下拉列表框中选择项目名FirstApp,

在Class name下拉列表框中选择类名CFirstAppView。

(4) 在Object IDs列表框中选择对象ID为CFirstAppView。

(5) 在Message列表框中选择需要处理的消息为WM_LBUTTONDOWN,即按下鼠标左键消息。

(6) 此时会发现Add Function按钮已经可用。单击此按钮,ClassWizard将选中消息的处理函数

添加到Member Functions列表框中。在本例中,对应WM_LBUTTONDOWN消息的处理函数

是OnLButtonDown()。

(7) 最后单击OK按钮结束。

注意:当用户为一些标准的Windows消息添加消息处理函数时,ClassWizard一般会自动地

为你创建一个默认的消息处理函数名。而当用户为非标准消息添加处理函数时,

ClassWizard将弹出一个对话框,并给出一个缺省的函数名,用户可以重新命名该消息响应函数。   在Visual C++的主窗口中打开项目工作区的ClassView选项卡,并打开CFirstAppView类的成员列表,就会发现消息处理函数OnLButtonDown()已经被添加进去了。   同时,通过查看文件,将会看到在CFirstAppView类的头文件FirstAppView.h中新加了消息处理函数OnLButtonDown()的声明。   可以看到该函数体是空的,其中只调用了一个其父类的成员函数,并且ClassView为用户生成了一些重要的注释行,以提示用户在何处添加自己的代码。

使用ClassWizard添加成员变量

成员变量也是类中不可或缺的组成部分,用于保存类的信息,我们将利用ClassView来为类添加

成员变量。具体步骤如下:

(1) 首先打开FirstApp的项目工作区。

(2) 点击菜单项View|ClassWizard,进入ClassWizard对话框。

(3) 在ClassWizard对话框中选择Member Variables选项卡,在Project下拉列表框中选择当前项目名

FirstApp,在Class name下拉列表框中选择当前类名CAboutDlg。此时在Controls IDs列表框中

将显示该类中包含的控件ID:"IDOK",这个ID值对应于About对话框中的OK按钮。

(4) 单击Add Variables按钮,将打开Add Member Variables对话框。有3个控件用来设置新成员变量的

一些重要信息。

◆ Member variables name文本框:该文本框用来输入新成员变量的名字,在默认情况下,

ClassWizard提供"m_"这个前缀以便将这个变量确认为成员变量。

◆ Category下拉列表框:该下拉列表框用于指定新变量是一个"Value"类型的成员变量还是

一个"Control"类型的成员变量。对于标准的Windows控件来说,选择Value可以创建一个包含

由用户来输入控件文本和控件状态的成员变量。而当用户选中Control选项时,就可以创建一

个"Control"类型的变量,我们可以对这个控件直接进行访问。

◆ Variable type下拉列表框:该下拉列表框用于选择变量的数据类型。

(5) 在Member variables name栏中输入变量名m_ok;在Category栏中选择该变量的类型:

copntrol类型;在Variable type栏中选择该变量的数据类型CButton。

(6) 单击OK按钮退出,这时我们可以看到,ClassWizard对话框中发生了改变。

打开FirstApp程序的项目工作区,可以看到,在CAboutDlg类的数据成员中,

新增加了一个成员变量:m_ok。在CAboutDlg类的成员函数DoDataExchange()中,

也添加了一条语句来映射控件ID值IDOK和成员变量m_ok:

DDX_Control(pDX, IDOK, m_ok);

使用ClassWizard覆盖虚拟函数

我们还可以使用ClassWizard来覆盖基类中定义的虚拟函数,方法如下:

(1) 打开ClassWizard对话框的Message Maps选项卡。

(2) 在Class name下拉列表框中选择一个类名来作为当前类。如CFirstAppView。

(3) 在Object Ids列表框中再次选择该类名,如CFirstAppView。

此时在Message列表框中将列出所有可以覆盖的虚拟函数名和所有可操作的Windows消息。

(4) 在Message列表框中选择所要覆盖的虚拟函数,如OnPaint()。

(5) 单击Add Function按钮覆盖基类的该虚拟函数。此时在Member functions列表框中将显示

虚拟函数名OnPaint()。注意在此函数前有一个"V"字母,表示该函数是一个虚拟函数。

(6) 单击OK按钮结束。   我们在头文件FirstAppView.h中可看到该虚拟函数的定义:

virtual void OnPaint(CDC * pDC, CPrintInfo * pInfo);

同时在实现函数FirstAppView.cpp中可看到该虚拟函数的函数体:

void CFirstAppView::OnPaint(CDC * pDC, CPrintInfo * pInfo)   {   //在此处加上专门

代码或调用基类   CView::OnPaint(pDC, pInfo);

}

相关推荐
jz_ddk11 小时前
[数学基础] 浅尝向量与张量
人工智能·机器学习·向量·张量
WW_千谷山4_sch11 小时前
洛谷B3688:[语言月赛202212]旋转排列(新解法:deque双端队列)
数据结构·c++·算法
Zachery Pole11 小时前
【代码随想录】二叉树
算法
漂流瓶jz12 小时前
UVA-11214 守卫棋盘 题解答案代码 算法竞赛入门经典第二版
c++·算法·dfs·aoapc·算法竞赛入门经典·迭代加深搜索·八皇后
浮生091912 小时前
DHUOJ 基础 88 89 90
算法
fpcc13 小时前
并行编程实战——CUDA编程的Enhancing Memory Allocation
c++·cuda
v_for_van13 小时前
力扣刷题记录7(无算法背景,纯C语言)
c语言·算法·leetcode
先做个垃圾出来………13 小时前
3640. 三段式数组 II
数据结构·算法
白太岁13 小时前
通信:(3) 高并发网络通信:epoll + 边沿触发 + 非阻塞 IO + tcp
c语言·网络·c++·网络协议·tcp/ip
楼田莉子13 小时前
C++项目:日志&&线程池
linux·c++·学习·visual studio code