VC常用数据类型列表
VC++中BYTE类型
VC++中BYTE类型byte是0~255直接的一个数字。
一般都是用byte数组。
byte 类型是一个字节的数据,这个类型有以下几个应用场合:1、最常用的一个场景,就是处理二进制数据流,比如说从某个文件读取一段,我们在读取的时候并不关心这个文件到底是什么格式,只需要关心我需要从哪里开始的多长的一段。
然后我们可以一个字节一个字节去分析这个文件的某部分。
或者我们用来获取网络上传递的信息,或者用来承载串行口传过来的数据等等。
2、最简单的一个场景,就是处理一个字节的数据。
对于来说,一个Char的长度不是一个字节,也不是两个字节,而仅仅是用来表示一个字符得很抽象的类——其实是两个字节,我这么说有我的理由的:比如说字符'A ',如果我们用AscII方式去理解,或者说转换成用AscII编码储存的二进制数据,那就是一个字节;如果用Unicode方式,那么就是两个字节。
也就是说现在不能像VB6那样,用Char来存储一个字节的数据(首先某些二进制值是非法字符,存不进去,其次就算存进去了,也很可能会浪费50%的空间,就算做得很好也不太可能有100%的利用率),你也不要企望一个Char他就一定是代表一个字节的内容。
所以现在我们用Byte来处理一个字节大小的数据。
3、如果你有很多很多的标志位,就是那种只要表示“是或否”的数据,如果你用Boolean就非常不合算,因为Boolean占用4个字节,而Byte只占用一个。
比如你有1百万个这样的标志,那么用Boolean要花费4MB,而用Byte只要1MB。
当然,为建议你最好不要用Byte 来作为标志使用,原因你自己慢慢体会。
现在的内存够大,没必要为了省这么3MB的空间而作出另外一些牺牲。
c语言 数据类型缩写及含义 表格
标题:深度解析C语言数据类型缩写及含义在计算机编程的世界中,数据类型是非常重要的概念。
在C语言中,数据类型的缩写及含义更是程序员们必须熟练掌握的知识点之一。
本文将深度解析C语言中常见的数据类型缩写及其含义,帮助读者更深入地理解这一重要主题。
1. 数据类型的概念在C语言中,数据类型用来声明变量的类型,指定变量可以存储的数据类型及所占用的内存大小。
C语言中的数据类型包括基本数据类型和派生数据类型。
基本数据类型包括整型、浮点型、字符型和空类型,而派生数据类型包括数组、指针、结构体和共用体等。
2. 基本数据类型2.1 int:整型在C语言中,int代表整型数据类型,通常用于声明整数变量。
int类型在不同的系统中所占用的内存大小可能会有所不同,但通常情况下,int类型占用4个字节的内存空间。
2.2 float:单精度浮点型float代表单精度浮点型数据类型,用于声明具有小数部分的变量。
float类型通常占用4个字节的内存空间,用于存储小数,精度约为6位有效数字。
2.3 double:双精度浮点型double代表双精度浮点型数据类型,用于声明双精度小数变量。
double类型通常占用8个字节的内存空间,精度约为15位有效数字。
2.4 char:字符类型char代表字符数据类型,用于存储单个字符的变量。
char类型通常占用1个字节的内存空间。
2.5 void:空类型void代表空类型,用于表示没有类型。
通常用于函数的返回值或指针的类型。
以上是C语言中常见的基本数据类型的缩写及含义。
掌握这些基本数据类型对于程序员来说非常重要,它们是构建任何C语言程序的基础。
3. 派生数据类型3.1 数组:一组相同数据类型的集合数组是C语言中一组相同数据类型的集合,可以存储固定大小的元素。
3.2 指针:存储变量位置区域的变量指针是C语言中非常重要的概念,它用来存储变量的内存位置区域。
指针可以指向任何数据类型的变量,它可以极大地提高程序的灵活性和效率。
VC 文件类型
.OBJ:由编译器或汇编工具生成的目标文件,是模块的二进制中间文件。
.ODL:用对象描述语言编写的源代码文件,VC用它来生成TLB文件。
.OLB:带有类型库资源的一种特殊的动态链接库,也叫对象库文件。
.OPT:VC开发环境自动生成的用来存放WorkSpace中各种选项的文件。工程关于开发环境的参数文件。如工具条位置信息等。
.EXP:由LIB工具从DEF文件生成的输出文件,其中包含了函数和数据项目的输出信息,LINK工具将使用EXP文件来创建动态链接库。只有在编译DLL时才会生成,记录了DLL文件中的一些信息。
.H、.HPP或.HXX:用C/C++语言编写的头文件,通常用来定义数据类型,声明变量、函数、结构和类。
.PLG:编译信息文件,编译时的error和warning信息文件。
.RC:资源定义文件。
.RC2:资源定义文件,供一些特殊情况下使用。
.REG:注册表信息文件。
.RES:二进制资源文件,资源编译器编译资源定义文件后即生成RES文件。
.RTF:Rich Text Format(丰富文本格式)文档,可由Word或写字板来创建,常被用来生成Help文件。
.INI:配置文件。
.LIB:库文件,LINK工具将使用它来连接各种输入库,以便最终生成EXE文件。
.LIC:用户许可证书文件,使用某些ActiveX控件时需要该文件。
.MAK:即MAKE文件,VC4及以前版本使用的工程文件,用来指定如何建立一个工程,VC6把MAK文件转换成DSP文件来处理。
.HLP:Windows帮助文件。
.HM:在Help工程中,该文件定义了帮助文件与对话框、菜单或其它资源之间ID值的对应关系。
VC虚级联、GFP和LCAS简介
VC虚级联、GFP和LCAS简介在SDH网络上传送以太网业务主要涉及到3个新标准:VC虚级联(VC Virtual concatenation)、通用封装过程GFP(Generic framing procedure)和连接容量调整安排LCAS (Link capacity adjustment scheme)。
VC虚级联用于在SDH上配置带宽灵活的容器承载各种新业务,LCAS用于在VC虚级联时提供带宽的无损动态调整以及在参与虚级联的部分VC 失效时提供保护,GFP则是目前最流行的SDH网络和光传送网络上的链路层封装协议。
VC 虚级联的技术细节在新版ITU_T G.707上(G.707/Y.1322 10/2000)描述,GFP的技术细节在ITU_T G.7041/Y.1303(12/2001)上描述,LCAS的技术细节在G.7042/Y.1305(11/2001)上描述。
VC虚级联:VC虚级联的基本思想是将多个VC级联起来实现一个带宽可灵活设置的容器(VCG)用于承载新业务,在源端将业务分散到各个参加级联的VC中,参加级联的多个VC在网络中独立传输,在宿端再通过时延补偿将各个VC承载的业务汇合成完整的业务流。
与VC实级联相比,因VC虚级联只需要对源端和宿端的设备进行升级,而不需要改动传输路径经过的中间设备,能很方便地在现有SDH网络上实现各种新业务的传送,所以该技术对在SDH 网络上传送各种新的宽带业务非常重要。
ITU-T G.707定义了2种VC虚级联:高阶VC虚级联,即VC-3/4虚级联(VC-3/4-Xv)和低阶VC虚级联,即VC-2/1虚级联(VC-2-Xv/ VC-12-Xv/VC-11-Xv)。
因同一VCG的不同VC在中间传输过程中单独传输,到宿端时不同的VC引入的时延不同,需要在宿端进行时延差补偿。
为在宿端能补偿较长的时延差,对VCG中每个VC新加一个专门的开销MFI(复帧指示)。
VC 复习提要和重点
2、根据变量所占用内存的方式,变量分为 4 种类型:自动类型(auto)、静态类型(static)、
寄存器类型(register)以及外部类型(extern)。
例: #include <iostream.h>
void f (void)
{ static i“i=“<<i<<‘\n’;
#define 符号常量 表达式 如:#define PI 3.1415926
方法二:常量说明符 const 如:const int buf=512;
(三)变量的作用域和存储类型
1、作用域有 5 类:块作用域、文件作用域、函数作用域、函数原型作用域以及类的作用域。
注意:作用域运算符“::”仅用于全局标识符。
C++中编译预处理包括:宏定义、文件包含和条件编译。 特点:以#开头标识;每一条预处理指令各占一行,不是以分号结束
1、 文件包含
格式:# include “文件名” 或 # include <文件名>
2、宏定义。(只作简单替换)
VC常用数据类型总结
VC常用数据类型总结VC(Visual C++)常用数据类型指的是在C++编程中经常使用的数据类型。
根据数据类型的特性和用途不同,VC常用数据类型可以分为以下几类:1. 基本数据类型(Primitive Data Types):- 整型(Integer Type):用于表示整数,包括有符号整数(signed)和无符号整数(unsigned),例如int、short、long、char等。
- 浮点型(Floating-Point Type):用于表示带小数点的数值,包括单精度浮点型(float)和双精度浮点型(double)。
- 字符型(Character Type):用于表示单个字符,例如char类型。
- 布尔型(Boolean Type):用于表示真(true)或假(false),例如bool类型。
2. 高级数据类型(Advanced Data Types):- 数组(Array):用于存储多个相同类型的元素,例如int数组、char数组等。
- 结构体(Structure):用于封装多个不同类型的变量,例如定义一个包含姓名、年龄等信息的Student结构体。
- 枚举(Enumeration):用于定义一组相关的常量,例如定义星期几的枚举类型。
3. 指针(Pointer):- 指针(Pointer):保存变量的内存地址,可以通过指针间接访问变量的值,例如int*指针。
- 空指针(Null Pointer):指向无效内存地址的指针,通常表示指针未初始化或指向不存在的对象。
- 空指针常量(Null Pointer Constant):表示空指针的特殊值,通常用NULL或nullptr表示。
4. 自定义数据类型(User-Defined Data Types):- 类(Class):用于创建自定义的数据类型,包含数据成员和成员函数。
- 模板(Template):用于创建通用的数据类型,支持不特定的数据类型参数,例如STL容器类(vector、list等)的模板类型。
VC++中的char wchar_T和TCHAR
大家一起做一个项目,经常发现有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX 函数,这个问题曾经搞的很混乱。
为了统一,有必要把来龙去脉搞清楚。
为了搞清这些函数,就必须理请几种字符类型的写法。
char就不用说了,先说一些wchar_t。
wchar_t是Unicode字符的数据类型,它实际定义在<string.h>里:typedef unsigned short wchar_t;不能使用类似strcpy这样的ANSI C字符串函数来处理wchar_t字符串,必须使用wcs前缀的函数,例如wcscpy。
为了让编译器识别Unicode字符串,必须以在前面加一个“L”,例如:wchar_t *szTest=L"This is a Unicode string.";下面在看看TCHAR。
如果你希望同时为ANSI和Unicode编译的源代码,那就要include TChar.h。
TCHAR是定义在其中的一个宏,它视你是否定义了_UNICODE宏而定义成char 或者wchar_t。
如果你使用了TCHAR,那么就不应该使用ANSI的strXXX函数或者Unicode 的wcsXXX函数了,而必须使用TChar.h中定义的_tcsXXX函数。
另外,为了解决刚才提到带“L”的问题,TChar.h中定义了一个宏:“_TEXT”。
以strcpy函数为例子,总结一下:.如果你想使用ANSI字符串,那么请使用这一套写法:char szString[100];strcpy(szString,"test");.如果你想使用Unicode字符串,那么请使用这一套:wchar_t szString[100];wcscpyszString,L"test");.如果你想通过定义_UNICODE宏,而编译ANSI或者Unicode字符串代码:TCHAR szString[100];_tcscpy(szString,_TEXT("test"));2.字符串及处理之三: 使用TCHAR系列方案使用TCHAR系列方案编写程序TCHAR是一种字符串类型,它让你在以MBCS和UNNICODE来build程序时可以使用同样的代码,不需要使用繁琐的宏定义来包含你的代码。
VC++中BYTE类型
VC++中BYTE类型byte是0~255直接的一个数字。
一般都是用byte数组。
byte 类型是一个字节的数据,这个类型有以下几个应用场合:1、最常用的一个场景,就是处理二进制数据流,比如说从某个文件读取一段,我们在读取的时候并不关心这个文件到底是什么格式,只需要关心我需要从哪里开始的多长的一段。
然后我们可以一个字节一个字节去分析这个文件的某部分。
或者我们用来获取网络上传递的信息,或者用来承载串行口传过来的数据等等。
2、最简单的一个场景,就是处理一个字节的数据。
对于来说,一个Char的长度不是一个字节,也不是两个字节,而仅仅是用来表示一个字符得很抽象的类——其实是两个字节,我这么说有我的理由的:比如说字符'A ',如果我们用AscII方式去理解,或者说转换成用AscII编码储存的二进制数据,那就是一个字节;如果用Unicode方式,那么就是两个字节。
也就是说现在不能像VB6那样,用Char来存储一个字节的数据(首先某些二进制值是非法字符,存不进去,其次就算存进去了,也很可能会浪费50%的空间,就算做得很好也不太可能有100%的利用率),你也不要企望一个Char他就一定是代表一个字节的内容。
所以现在我们用Byte来处理一个字节大小的数据。
3、如果你有很多很多的标志位,就是那种只要表示“是或否”的数据,如果你用Boolean就非常不合算,因为Boolean占用4个字节,而Byte只占用一个。
比如你有1百万个这样的标志,那么用Boolean要花费4MB,而用Byte只要1MB。
当然,为建议你最好不要用Byte 来作为标志使用,原因你自己慢慢体会。
现在的内存够大,没必要为了省这么3MB的空间而作出另外一些牺牲。
VC 1100中文版
技术文档
VC 1100
目录
目录
VIBROCONTROL 1100 - C01 / C02 / C11 / C12
1 总述 2 技术参数 3 端子接口 4 操作面板和显示
错误信息
5 参数列表 6 安装和调试
© VC1100E/contents C01 / C02 - C11 / C12 Version 2 →
测量参数 振动位移 振动速度 振动加速度
简写 s v a
mm mm/s g
单位
mils ips m/s2
如果使用振动加速度传感器进行测量,可以同时测量和监测滚动轴承的轴承状 态值。
轴承状态单位是BCU
轴承状态
---
BCU
注意:
BCU 比例系数
使用BCU的比例系数,BCU的测量值可以乘上一个比例系数。 这 个 系 数 的 范 围 在0.1到10之间,通道A的比例系数设置在参数J19,通道B的比例系数 设置在参数J20。而如果J19和J20参数中比例系数设置为1,显示的值 为实际测量值。 BCU的比例系数用于将测量值变换为预定的初始值,便于几个测量点 之间进行比较。BCU的比例系数用于新的轴承的设置会有非常好的效 果。
一个损坏的防滑块通常会不断的改变位置,每转几圈损坏的部分会通过一次轴 承表面,同样会引起BCU值的变化。
以上情况引起的BCU值变化不应该认为轴承的损坏。
测量值能够通过过滤方式进行平均,以保以上情况引起“变化”(不代表设备 的正常状态)不会触发报警,过滤方式采用可调节的时间常量(平均时间 10---3600秒)。
比例系数的计算
将每个测量点的比例系数设置为1。 采集当前的测量值。 根据需要设置的BCU初始值和当前测点的测量值,计算BCU的比例系数J19和J20 按照以下的方程式:
VC++ 列表控件(CList) 使用方法 (2)
VC++ 列表控件(CList) 使用方法(2)列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。
MFC中使用CListCtrl类来封装列表控件的各种操作。
通过调用BOOL Create( DWORD dwStyle, const RECT&rect, CWnd* pParentWnd, UINT nI D );创建一个窗口,dwStyle中可以使用以下一些列表控件的专用风格:LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT 这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:大图标显示,小图标显示,列表显示,详细报表显示LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。
LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点LVS_SINGLESEL 同时只能选中列表中一项首先你需要设置列表控件所使用的ImageList,如果你使用大图标显示风格,你就需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);如果使用其它三种风格显示而不想显示图标你可以不进行任何设置,否则需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_SMALL);通过调用intInsertItem( intnItem, LPCTSTR lpszItem );可以在列表控件中nItem指明位置插入一项,lpszItem为显示字符。
除LVS_REPORT风格外其他三种风格都只需要直接调用InsertItem就可以了,但如果使用报表风格就必须先设置列表控件中的列信息。
通过调用intInsertColumn( intnCol, LPCTSTR lpszColumnHeading, intnFormat , intnWidth, i ntnSubItem);可以插入列。
VC各文件类型作用大全
*.bsc:是用于浏览项目信息的,如果用Source Brower的话就必须有这个文件。如果不用这个功能的话,可以在Project Options里面去掉Generate Browse Info File,可以加快编译速度。
debug和release区别:
Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此不讨论)Debug 版本参数 含义 /MDd /MLd 或 /MTd 使用 Debug runtime library (调试版本的运行时刻函数库) /Od 关闭优化开关 /D "_DEBUG" 相当于 #define _DEBUG,打开编译调试代码开关 (主要针对assert函数) /ZI 创建 Edit and continue(编辑继续)数据库,这样在调试过程中如果修改了源代码不需重新编译 /GZ 可以帮助捕获内存错误 /Gm 打开最小化重链接开关, 减少链接时间 Release 版本 参数 含义 /MD /ML 或 /MT 使用发布版本的运行时刻函数库 /O1 或 /O2 优化开关,使程序最小或最快 /D "NDEBUG" 关闭条件编译调试代码开关 (即不编译assert函数) /GF 合并重复的字符串, 并将字符串常量放到只读内存, 防止被修改 实际上,Debug 和 Release
VC++中数据类型转换大全
vc数据类型转换大全(转载)int i = 100;long l = 2001;float f=300.2;double d=12345.119;char username[]=”程佩君”;char temp[200];char *buf;CString str;_variant_t v1;_bstr_t v2;一、其它数据类型转换为字符串短整型(int)itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制itoa(i,temp,2); ///按二进制方式转换长整型(long)ltoa(l,temp,10);浮点数(float,double)用fcvt可以完成转换,这是MSDN中的例子:int decimal, sign;char *buffer;double source = 3.1415926535;buffer = _fcvt( source, 7, &decimal, &sign );运行结果:source: 3.1415926535 buffer: ‘31415927′ decimal: 1 sign: 0decimal表示小数点的位置,sign表示符号:0为正数,1为负数CString变量str = “2008北京奥运”;buf = (LPSTR)(LPCTSTR)str; //这个因为buf是个char*变量先把CString 变量转换为const char*类型的再变为char*类型的上面的CString转换为char*型号的必须经过两次反之的直接赋值就可以BSTR变量BSTR bstrValue = ::SysAllocStri ng(L”程序员”);char * buf = _com_util::ConvertBSTRToString(bstrValue); SysFreeString(bstrValue);一定注意凡是定义的指针变量一定要用delete显示删除AfxMessageBox(buf);delete(buf);CComBSTR变量CComBSTR bstrVar(”test”);char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str); AfxMessageBox(buf);delete(buf);_bstr_t变量_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用_bstr_t bstrVar(”test”);const char *buf = bstrVar;///不要修改buf中的内容_bstr_t实际上是个字符指针型的AfxMessageBox(buf);通用方法(针对非COM数据类型)用sprintf完成转换char buffer[200];char c = ‘1′;int i = 35;long j = 1000;float f = 1.7320534f;sprintf( buffer, “%c”,c);sprintf( buffer, “%d”,i);sprintf( buffer, “%d”,j);sprintf( buffer, “%f”,f);二、字符串转换为其它数据类型strcpy(temp,”123″);短整型(int)i = atoi(temp);长整型(long)l = atol(temp);浮点(double)d = atof(temp);CString变量CString name = temp;BSTR变量BSTR bstrValue = ::SysAllocString(L”程序员”);…///完成对bstrValue的使用SysFreeString(bstrValue);CComBSTR变量CComBSTR类型变量可以直接赋值CComBSTR bstrVar1(”test”);CComBSTR bstrVar2(temp);_bstr_t变量_bstr_t类型的变量可以直接赋值_bstr_t bstrVar1(”test”);_bstr_t bstrVar2(temp);三、其它数据类型转换到CString使用CString的成员函数Format来转换,例如:整数(int)str.Format(”%d”,i);浮点数(float)str.Format(”%f”,i);字符串指针(char*)等已经被CString构造函数支持的数据类型可以直接赋值str = username;对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char*的方法先转到char *,然后赋值给CString变量。
VC++常用数据类型
VC++常用数据类型在Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。
之所以出现类似上述的这些数据类型,是因为不同编程语言之间的数据交换以及对ANSI、Unicode和多字节字符集(MBCS)的支持。
那么什么是BSTR、LPSTR以及LPWSTR呢?BSTR(Basic STRing,Basic字符串)是一个OLECHAR*类型的Unicode字符串。
它被描述成一个与自动化相兼容的类型。
由于操作系统提供相应的API函数(如SysAllocString)来管理它以及一些默认的调度代码,因此BSTR实际上就是一个COM字符串,但它却在自动化技术以外的多种场合下得到广泛使用。
图1描述了BSTR的结构,其中DWORD值是字符串中实际所占用的字节数,且它的值是字符串中Unicode字符的两倍。
LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。
LPSTR被定义成是一个指向以NULL(‘/0’)结尾的8位ANSI 字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。
在VC++中,还有类似的字符串类型,如LPTSTR、LPCTSTR等,它们的含义如图2所示。
例如,LPCTSTR是指“long pointer to a constant generic string”,表示“一个指向一般字符串常量的长指针类型”,与C/C++的const char*相映射,而LPTSTR映射为char*。
一般地,还有下列类型定义:#ifdef UNICODEtypedef LPWSTR LPTSTR;typedef LPCWSTR LPCTSTR;#elsetypedef LPSTR LPTSTR;typedef LPCSTR LPCTSTR;#endif二、CString、CStringA 和CStringWVisual C++.NET中将CStringT作为ATL和MFC的共享的“一般”字符串类,它有CString、CStringA和CStringW三种形式,分别操作不同字符类型的字符串。
VC C 的类举例详解
bool isLeapYear(Date d) {
return (d.year % 4==0 && d.year % 100!=0)||(d.year % 400==0); }
结构类型的定义还是存在局限性,它只定义了一组不同类型数据 的集合,而没有定义相关操作,如赋值、输出等。特别是在一个程序 员接手另一个程序员工作的时候,这种对结构的理解和编写相关操作 的负担加重了。
class Date {
int year,month,day; public:
void set(int y,int m,int d) {
year=y;month=m;day=d; }//;赋值操作,默认内联 bool isLeapYear(); void print(); };
// 判断闰年 // 输出日期
4、给结构变量的赋值就是给各成员赋值。可用输入语句或赋值
语句来完成。
例题:日期结构
#include<iostream> #include<iomanip> using namespace std;
struct Date {
int year; int month; int day; };
void print(Date); bool isLeapYear(Date d);
2)在定义结构类型的同时说明结构变量。例如: struct Stu {
char name[20]; char sex; int age; float score; }boy1,boy2;
[14]VC++ WinMain主函数参数介绍和HINSTANCE“句柄”型数据类型
//
//第2个例子
//吴新2008/01/06
#include"stdafx.h"
#include"second.h"
intAPIENTRY_tWinMain(HINSTANCEh Instance,
HINSTANCEhPrevInstance,
LPTSTRlpCmdLine,
intnCmdShow)
{
constintBUFSIZE=256;
TCHARwAppTitle[BUFSIZE];
//初始化全局字符串
LoadString(hInstance,IDS_APP_TITLE,wAppTitle,BUFSIZE);
//获取桌面句柄
HWNDhWnd=GetDesktopWindow();
//将wAppTitle显示在消息窗口中
实际上HINSTANCE并非纯粹意义上的句柄(HANDLE),因为它实际上是由物理PE文件映射到WINDOWS进程的虚拟模块首地址,这个地址上包含了PE头信息和PE文件映射后的具体内容,微软将之作为句柄来体现在原因在于PE头过于复杂,使用者直接对PE结构进行访问不安全,这种编程手法在C语言编程中很常见,对于使用者而言,HINSTANCE的意义在于对WINDOWS资源进行访问,也可以将它作为HMODULE来访问模块的导出函数等等。
//WinMain()主程序的参数LPSTRlpszCmdLine命令行参数的意思。(LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。LPSTR被定义成是一个指向以NULL(‘\0’)结尾的32位ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的64位双字节字符数组指针。)程序启动的命令,一般是程序的文件名及启动参数。命令行参数的意思有很多,很多程序都有命令行参数,但是在Windows软件里,命令行参数一般不被普通用户直接使用。
VC中CList用法及其成员的使用
VC中CList用法及其成员的使用初学mfc者,往往对CList等mfc的Collect类的使用感到迷惑,在使用中经常会遇到许多问题,导致对vc中的Collect类的使用产生了惧怕。
以下,就个人经历而言,告诉大家如何使用CList。
CList是一个双向链表类。
1、头文件名不可少Clist类定义在Afxtempl.h 头文件中,因此在使用该类时,需要加这个头文件名。
2、理解CList的声明和构造方法CList的声明如下:template< class TYPE, class ARG_TYPE >class CList : public CObject由此,我们知道CList是一个模版类,那么他的两个class是什么意思呢?下面看一个例子:CList<CString ,CString&> list;//链表对象1CList<CString,CString> list2;//链表对象2这里的第一个参数CString是实例化的类型,第二个参数是类的成员函数的参数的调用形式,通常是类型引用,当然也可以是对象,而不是引用。
对象和引用的区别,可以看一下C++基础知识方面的书。
/////////////////////////////////////////////////////////////////////////////// MSDN:使用时要#include <afxtempl.h>ConstructionCList Constructs an empty ordered list.建立一个链表example:CList<int,int> myList;//建立一个int链表CList<CString,CString&> myList(16);//建立一个cstring的链表,后面的16表示链表里面数据的个数,如果不写的话,可能是不限个数?CList<MYTYPE,MYTYPE&> myList;//建立一个MYTYPE类型(自定义)的链表如果不存入数据的话,刚建立的链表是空的,头尾都为空Head/Tail AccessGetHead Returns the head element of the list (cannot be empty).返回链表的头数据例子:CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据int tmp=myList.GetHead();//tmp被赋予了0GetTail Returns the tail element of the list (cannot be empty).返回链表的尾数据CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据int tmp=myList.GetTail();//tmp被赋予了9999OperationsRemoveHead Removes the element from the head of the list.移除链表头数据,链表数据个数减1,返回缩减前的头数据例子:CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据int tmp=myList.RemoveHead();//tmp被赋予了之前的头数据:0;同时数据个数变为9999;RemoveTail Removes the element from the tail of the list.移除链表尾数据,链表数据个数减1,返回缩减前的尾数据例子:CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据int tmp=myList.RemoveTail();//tmp被赋予了之前的尾数据:9999;同时数据个数变为9999;AddHead Adds an element (or all the elements in another list) to the head of the list (makes a new head).在链表头处插入新数据,链表数据个数加1,返回新的链表头位置(POSITION); 例子:CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.AddHead(int(314));//链表有了一个新的头数据:314;同时链表个数变为10001;pos为新的头的位置;AddTail Adds an element (or all the elements in another list) to the tail of the list (makes a new tail).在链表尾处插入新数据,链表数据个数加1,返回新的链表尾位置(POSITION); 例子:CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.AddTail(int(314));//链表有了一个新的尾数据:314;同时链表个数变为10001;pos为新的尾的位置;RemoveAll Removes all the elements from this list.清空链表,其头尾皆变成空指针;IterationGetHeadPosition Returns the position of the head element of the list.返回链表头的位置;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetHeadPosition();//获得链表头的位置GetTailPosition Returns the position of the tail element of the list.返回链表尾的位置;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetTailPosition();//获得链表尾的位置GetNext Gets the next element for iterating.返回当前位置的数据,之后,位置后移一位;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetHeadPosition();//获得链表头的位置int tmp=myList.GetNext(pos);//tmp被赋予了头数据的值:0;同时pos指向第二个数据1;GetPrev Gets the previous element for iterating.返回当前位置的数据,之后,位置前移一位;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetTailPosition();//获得链表尾的位置int tmp=myList.GetNext(pos);//tmp被赋予了尾巴数据的值:9999;同时pos指向倒数第二个数据9998;Retrieval/ModificationGetAt Gets the element at a given position.返回指定位置的数据;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetTailPosition();//获得链表尾的位置,还可以继续改变pos,以指向其他数据int tmp=myList.GetAt(pos);//tmp被赋予链表尾的数据SetAt Sets the element at a given position.CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetTailPosition();//获得链表尾的位置,还可以继续改变pos,以指向其他数据myList.SetAt(pos,int(222));//将链表尾部的数据赋成222RemoveAt Removes an element from this list, specified by position.清除指定位置处的数据;同时数据个数减1;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetTailPosition();//获得链表尾的位置myList.RemoveAt(pos);//链表pos(尾部)位置的数据被清除,数据个数变为9999;InsertionInsertBefore Inserts a new element before a given position.在指定位置前插入一个新数据,数据个数加1;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetHeadPosition();//获得第一个数据的位置myList.InsertBefore(pos,int(123));//在第一个数据前插入一个新数据:123,同时数据个数变为10001InsertAfter Inserts a new element after a given position.在指定位置后插入一个新数据,数据个数加1;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.GetHeadPosition();//获得第一个数据的位置myList.InsertAfter(pos,int(123));//在第一个数据后插入一个新数据:123,同时数据个数变为10001SearchingFind Gets the position of an element specified by pointer value.返回指定数据对应的位置;CList<int,int> myList;for(int i=0;i<10000;i++) { myList.AddTail(int(i)); }//存入数据POSITION pos=myList.Find(int(0));//获得0(链表头)的位置FindIndex Gets the position of an element specified by a zero-based index.返回索引号对应的位置;POSITION pos=myList.FindIndex(0);//0表示链表头,以此类推StatusGetCount Returns the number of elements in this list.返回链表的数据个数int num=myList.GetCount();//获得链表的数据个数IsEmpty Tests for the empty list condition (no elements).判定链表是否为空;返回1表示链表是空,返回0表示链表非空;BOOL empty=myList.IsEmpty();。
c语言 基本数据类型与常用库函数
指数形式:由正号、负号、数字、小数点和指数符号e(或E)
组成。
字母e(或E)之前必须有数字(整数或实数),且e后面的指数必
须为整数。 如: 123e4 0.2e-1
注意: 1)所赋初值和说明的类型必须一致。 如:int a=2.3; 2) 变量必须赋可以确定的值,先赋值再引用。 如:int a, b=a/2; 3)由于变量实质是内存一块区域,因此变量 指在某一时刻只能存储一个值,一旦一个新 的值填入,则旧的值就消失,且永远不能恢 复。变量实际上是保存的最后一次赋予的值。 如:先说明:int a=0;再有动作:a 2 和 a 3,则过程和结果如何?
10
练习
下列标识符(变量名)哪些是合法的? day1, student_name, _total, M.D, 123A, #wer, int , if
11
2.1 2.2
字符集与标识符
基本数据类型 常量与变量
2.3
2.4 2.5
输入/输出函数用法
常用函数
12
§2.2
本章讨论 基本类型数据
基本数据类型
整型常量 实型常量 字符型常量 字符串常量
100,125,-100,0 3.14 ,0.125,-3.789 ‘a‟, „b‟,‘2‟ “hello”, “0.912e8”
16
符号常量 在程序设计中,需要多次用到某些常数,或者 有些数值特别关键,因此将其定义为符号常量, 便于程序的阅读和修改。 符号常量是在程序中指定用一个标识符代表一 个常量。 定义格式:
8
(二)用户指定的标识符:是以52个英文字母 (a~z,A~Z)或者下划线(_)开头, 后面 可以跟随任意的字母、数字、下划线组成的字 符序列。
《新概念C语言能力教程》第2章基本数据类型
• 其中的l(long)和h(short)称为长度修饰符,是附加的格式说明符。
格式字符串与数据类型
• unsigned short a = -1u; • 语句printf("%hu", a);中格式字符串hu(无符号短整型)准确地匹配了变量a
printf函数的输出结果不会是22亿。这条语句有逻辑错误。
分析下面语句的输出结果。
• printf("%lu", 2200000000); • printf("%ld", -1); • printf("%lu", -1u); • printf("%hd", -1); • printf("%hu", -1u); • printf("%hu", -2);
编码和解码
• 现实世界中的数据转换成由0和1组成的二进制串,计算机才能存储和处理。 由数据得到01串称为编码;由01串得到数据称为解码。
• 每类数据都各有特点,只用一种编码规则统一编码是不现实的。不同类型的 数据如整数和小数,采用了不同的编码规则。
• 多种编码规则导致不同数据的编码结果可能相同,因此,只有确定了编码规 则,才能正确解码。
功的识别的16。 • 当用户输入32789↙时,全部识别成功,但短整型变量m的实际值不会是
的类型,printf函数正确地输出变量a的实际值65535。 • 语句printf("%hd", a);中格式字符串hd(短整型)与变量a的类型不匹配,
vc数据类型转换(Vcdatatypeconversion)
vc++数据类型转换(Vc++ data type conversion)It (2009-07-23 15:59:46) tags used in VC++: Category: ProgrammingString conversion1.CString transforms into plastic IntCString str=_T ("12345");ATOI ((LPCSTR) STR); / / LPCSTR const char* can be transformed intoCString str= "1"";Int n=atoi (str.GetBuffer (0));2. transfer a CString to an array of char (char*)Char buffer[128]CString str;A.//strcpy methodStrcpy (buffer, str.GetBuffer ());Str.ReleaseBuffer ();B.// forced conversion methodBuffer= (LPTSTR) (LPCTSTR) str;C.//sprintf methodSprintf (buffer,%s, STR);D.CString str;Int, nLength=str.GetLength ();Char * sz=new char[nLength];Sz=str.GetBuffer (0);(LPCSTR) CStringE. can be converted to char* by type forcing, such as CString: CString cStr = "Hello, world"!";Char* zStr = (char*) (LPCTSTR) cStr;3.int turn CStringCString string;Int iValue=100;String.Format (_T ("%d"), iValue);MessageBox (string);The value of "string" is "100""4.char * turn CStringA.Char sz[128];CString str;Str.Format ("%s", SZ);B.CString.format ("%s", char*);CString strtest;Char * charpoint;Charpoint= "give string a value"";Strtest=charpoint; / / direct payment valueC.The char* type can be given directly to the CString and complete automatic conversion, for example:Char* zStr = "Hello, world"!";CString cStr = zStr;5.Float turn CStringFloat f=0.0;CString str;Str.Format ("%f", f);6.CString turn FloatCString str= "0"";Float f=atof (str.GetBuffer (0));7.string turn CStringCString.format ("%s", string.c_str ()); Using c_str () is really better than data () 8.char* turn int#include <stdlib.h>Int ATOI (const, char, *nptr);Long Atol (const, char, *nptr);Long, long, Atoll (const, char, *nptr);Long, long, atoq (const, char, *nptr);9.CString turn stringString s (CString.GetBuffer ());GetBuffer () must be ReleaseBuffer (), otherwise there is no space for the buffer to be released10.int turn char *There is a function Itoa () in stdlib.hThe use of itoa:Itoa (I, num, 10);I needs to convert characters into numbersSave character variables after num conversion10 conversion of the number of base (hexadecimal) 10, that is, in accordance with the 10 hexadecimal conversion numbers. Can also be 2, 8, 16, etc., you like the hexadecimal typeChar *itoa (int, value, char*, string, int, Radix);Example:#include "stdlib.h""#include "stdio.h"" (main){Int i=1234;Char s[5];Itoa (I, s, 10);Printf ("%s", s);Getchar ();}11.string turn char * Char *p = string.c_str (); String AA ("AAA");Char, *c=aa.c_str (); String mngName;Char t[200];Memset (T, 0200);Strcpy (T, mngName.)c _ str ());12、cstring to lpcstr将cstring转换成lpcstr, 需要获得cstring的长度, 例如: cstring cstr _ t = ("hello, world!") ;int nlen = cstr.getlength ();lpcstr lpszbuf = cstr.getbuffer (nlen);13、cstring to lpstr这个和第3个技巧是一样的, 例如:cstring cstr _ t = ("hello, world!") ;int nlen = str.getlength ();lpstr lpszbuf = str.getbuffer (nlen);14、char [] to int将字符串类型转换成整数型, 可以使用atoi函数, 例如:char c [10].int n;n = atoi (c);15、char [] to float和第5个技巧一样, 使用atof () 函数可以转换成float型, 例如: char c [10].float f;f = atof (c);16、char * to intchar * str = "100".int i;the = atoi (str).一、其它数据类型转换为字符串短整型 (int)itoa (s, s, 0); / / / 将i转换为字符串放入temp中, 最后一个数字表示十进制itoa (s, s, 2); / / / 按二进制方式转换长整型 (long)ltoa (l, s, 10);二、从其它包含字符串的变量中获取指向该字符串的指针cstring变量str = "2008北京奥运";buf = (lpstr) (lpctstr) str;bstr类型的 _ alternate _ t变量v1 = (_ bstr _ t) "程序员";buf = _ com _ util: convertbstrtostring (_ bstr _ t) v1.三、字符串转换为其它数据类型strcpy (temp, "123");短整型 (int)the = atoi (temp).长整型 (long)l = atol (temp).浮点 (double)d = atof (temp).四、其它数据类型转换到cstring使用cstring的成员函数format来转换, 例如:整数 (int)str.format ("% d").浮点数 (float)str.format ("% f").字符串指针 (char *) 等已经被cstring构造函数支持的数据类型可以直接赋值str = username.五、bstr、 _ bstr _ t与ccombstrccombstr、 _ bstr _ t是对bstr的封装, bstr是指向字符串的32位指针.char * 转换到bstr可以这样: bstr b = _ com _ util: convertstringtobstr ("数据"); / / / 使用前需要加上头文件comutil.h反之可以使用char * p = _ com _ util: convertbstrtostring (b);六、variant 、 _ alternate _ t 与 colevariantvariant的结构可以参考头文件vc98 \ include \ oaidl.h中关于结构体tagvariant的定义.对于variant变量的赋值: 首先给vt成员赋值, 指明数据类型, 再对联合结构中相同数据类型的变量赋值, 举个例子:alternate work.int a = 2001;va.vt = vt _ 14; / / / 指明整型数据va.lval = a; / / / 赋值对于不马上赋值的variant, 最好先用void variantinit (variantarg to * pvarg); 进行初始化, 其本质是将vt设置为vt _ empty, 下表我们列举vt与常用数据的对应关系:unsigned char bval; _ ui1 vtshort ival; vt _ i2long lval; vt _ 14float fltval; vt _ r4double dblval; vt _ r8alternate _ bool boolval; vt _ boolscode scode; vt _ errorcy cyval; vt _ cydates dates; vt _ datesbstr bstrval; _ bstr vtiunknown to * punkval; vt _ unknownidispatch to * pdispval; _ dispatch vtsafearray to * parray;vt _ array | *unsigned char father * pbval; vt _ byref | vt _ ui1 short father * pival; vt _ byref | vt _ i2long father * plval; vt _ byref | vt _ i4float father * pfltval; vt _ byref | vt _ r4 double father * pdblval; vt _ byref | vt _ r8variant _ all father * pboolval; vt _ byref | vt _ allscode father * pscode; vt _ byref | vt _ errorcy dad * pcyval; vt _ byref | vt _ cydad * date pdate; vt _ byref | vt _ datebstr father * pbstrval; vt _ byref | vt _ bstriunknown dad dad * * ppunkval; vt _ byref | vt _ unknownidispatch dad dad * * ppdispval; vt _ byref | vt _ dispatchsafearray dad dad * * pparray; vt _ array | *variant father * pvarval; vt _ byref | vt _ variantvoid father * byref; vt _ byref_ variant _ t是variant的封装类, 其赋值可以使用强制类型转换, 其构造函数会自动处理这些数据类型.例如:long l = 222;ing in = 100;_ variant _ t lval (l);lval = (long);colevariant的使用与 _ variant _ t的方法基本一样, 请参考如下例子:colevariant v3 = "字符串", v4 = (long) 1999;cstring str = (bstr) v3.pbstrval;long in = v4.lval;七、其它对消息的处理中我们经常需要将wparam或lparam等32位数据(dword) 分解成两个16位数据 (word), 例如:lparam lparam;word lovalue = loword (lparam); / / / 取低16位word hivalue = hiword (lparam); / / / 取高16位对于16位的数据 (word) 我们可以用同样的方法分解成高低两个8位数据 (byte), 例如:word wvalue;byte lovalue = lobyte (wvalue); / / / 取低8位byte hivalue = hibyte (wvalue); / / / 取高8位后记: 本文匆匆写成, 错误之处在所难免, 欢迎来信指正.int - > str itoa, atoidouble str ftoa, fabrics_ bstr _ t, _ variant _ t, cstring, long 等等看看下面:我给你点详细的例子, 看下面先看懂 _ variant _ t与 _ bstr _ t这两个类的构造函数和operator =里面有重载了很多情况,其他类型向 _ variant _ t 赋值:_ variant _ t (); throw ()_ variant _ t (which variant & varsrc) throw (_ com _ error);_ variant _ t (which variant * pvarsrc) throw (_ com _ error);_ variant _ t (which _ variant _ t & t was _ _ src) throw (_ com _ error);_ variant _ t (variant & varsrc, all fcopy) throw (_ com _ error);_ variant _ t (short ssrc, vartype vtsrc = vt _ i2) throw (_ com _ error);_ variant _ t (long lsrc, vartype vtsrc = vt _ i4) throw (_ com _ error);_ variant _ t (float fltsrc) throw ();_ variant _ t (double dblsrc, vartype vtsrc = vt _ r8) throw (_ com _ error);_ variant _ t (which cy & cysrc) throw ();_ variant _ t (which _ bstr _ t & bstrsrc) throw (_ com _ error);_ variant _ t (which wchar _ t * wstrsrc) throw (_ com _ error);_ variant _ t (which char * strsrc) throw (_ com _ error);_ variant _ t (all bsrc) throw ();_ variant _ t (iunknown * piuknownsrc, all faddref = true) throw ();_ variant _ t (idispatch * pdispsrc, all faddref = true) throw ();_ variant _ t (which decimal & decsrc) throw ();_ variant _ t (byte bsrc) throw ();operator = 的重载形式:_ variant _ t & operator = (which variant & varsrc) throw (_ com _ error);_ variant _ t & operator = (which variant * pvarsrc) throw (_ com _ error);_ variant _ t & operator = (which _ variant _ t & t was _ _ src) throw (_ com _ error);_ variant _ t & operator = (short ssrc) throw (_ com _ error);_ variant _ t & operator = (long lsrc) throw (_ com _ error);_ variant _ t & operator = (float fltsrc) throw (_ com _ error);_ variant _ t & operator = (double dblsrc) throw (_ com _ error);_ variant _ t & operator = (which cy & cysrc) throw (_ com _ error);_ variant _ t & operator = (which _ bstr _ t & bstrsrc) throw (_ com _ error);_ variant _ t & operator = (which wchar _ t * wstrsrc) throw (_ com _ error);_ variant _ t & operator = (char * which strsrc) throw (_ com _ error);_ variant _ t & operator = (idispatch * pdispsrc) throw (_ com _ error);_ variant _ t & operator = (all bsrc) throw (_ com _ error);_ variant _ t & operator = (iunknown * psrc) throw (_ com _ error);_ variant _ t & operator = (which decimal & decsrc) throw (_ com _ error);_ variant _ t & operator = (byte bsrc) throw (_ com _ error); 有了以上两个函数, 举个例子:double f = 1.0_ variant _ t v;v = f; / / 是合法的看看operator = 的重载形式就知道了cstring str = "ddd"_ variant _ t v;v = str.allocsysstring () 或者v = (_ bstr _ t) (char * str); 即可_ variant _ t转换成别的形式你首先必须确定你要转化成什么样的形式double f;_ variant _ t vf = v.dblval 即可或者f = (double) v; 也可以附: _ variant _ t的操作符operator short () which throw (_ com _ error); operator long () which throw (_ com _ error); operator float () which throw (_ com _ error); operator double () which throw (_ com _ error); operator (cy) which throw (_ com _ error);the operator all () which throw (_ com _ error); decimal operator () which throw (_ com _ error); operator byte () which throw (_ com _ error); operator _ bstr _ t () which throw (_ com _ error); operator idispatch * () which throw (_ com _ error); operator iunknown * () which throw (_ com _ error);1 string2 cstringcstring.format ("% s", string.c _ str ());2 cstring 2 stringstring str (cstring.getbuffer (str.getlength ()));3 2 char * stringchar * p = string.c _ str ();4 string char * 2string str (char *);5 cstring 2 char *strcpy (char, cstring, sizeof (char));6 char * 2 cstringcstring.format ("% s", char *);cstring的format方法是非常好用的.string的c _ str () 也是非常常用的, 但要注意和char * 转换时, 要把char定义成为const char *, 这样是最安全的.*********************************************************** *************************************1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指向一个RECT结构体常量(不能修改)的32位指针
CString
其实是MFC中的一个类
说明:
(1)-------表示省略
(2)1Byte=8Bit,
字与机器有关,在8位系统中:字=1字节,16位系统中,1字=2字节,32位中:1字=4字节,
64位中1字=8字节.不要搞混这些概念.
COleVariant也是VARIANT的封装类
WNDPROC
指向一个窗口过程的32位指针
WCHAR
16位Unicode字符型
WORD
16位无符号整型
WPARAM
消息参数
MFC
独有
数据
类型
下面两个数据类型是微软基础类库中独有的数据类型
POSITION
标记集合中一个元素的位置的值,被MFC中的集合类所使用
Type
Default Size
Description
基
础
类
型
全
是
小
写
说明:这些基础数据类型对于MFC还是API都是被支持的
boolean
unsigned 8 bit ,
取值TRUE/FALSE
byte
unsigned 8 bit,
整数,输出按字符输出
char
unsigned 8 bit,
字符
double
signed 64 bit
浮点型
float
signed32 bit
浮点型
handle_t
Primitive handle type
hyper
signed 64 bit
整型
int
signed 32 bit
整型
long
signed 32 bit
整型
short
signed 16 bit
整型
small
signed 8 bit
HPEN
pen句柄
HWND
window句柄
INT
--------
--------
LONG
--------
---------
LONGLONG
64位带符号整型
LPARAM
32 bit
消息参数
LPBOOL
BOOL型指针
LPBYTE
BYTE型指针
LPCOLOREF
COLORREF型指针
LPCSTR/LPSTR/PCSTR
unsigned 32 bit
整型
FLOAT
float型
float型
HANDLE
Object句柄
HBITMAP
bitmap句柄
HBRUSH
brush句柄
HCURSOR
cursor句柄
HDC
设备上下文句柄
HFILE
OpenFile打开的File句柄
HFONT
font句柄
HHOOK
hook句柄
HKEY
注册表键句柄
BOOL/BOOLEAN
8bit,TRUE/FALSE
布尔型
BYTE
unsigned 8 bit
BSTR
CComBSTR
_bstr_t
32 bit
BSTR是指向字符串的32位指针
是对BSTR的封装
是对BSTR的封装
CHAR
8 bit
(ANSI)字符类型
COLORREF
32 bit
RGB颜色值整型
DWORD
SHORT
usigned
整型
其他UCHAR、UINT、ULONG、ULONGLONG、USHORT为无符号相应类型
TBYTE
WCHAR型或者CHAR型
TCHAR
ANSI与unicode均可
VARIANT
_variant_t
COleVariant
一个结构体参考OAIDL.H
_variant_t是VARIANT的封装类
PBOOL、PBOOLEAN、PBYTE、PCHAR、PDWORD、PFLOAT、PHANDLE、PINT、PLONG、PSHORT……
说明:(1)在16位系统中LP为16bit,P为8bit,在32位系统中都是32bit(此时等价)
(2)LPCSTR等中的C指Const,T表示TCHAR模式即可以工作在ANSI下也可UNICODE
指向8位(ANSI)字符串类型指针
LPCWSTR/LPWSTR/PCWSTR
指向16位Unicode字符串类型
LPCTSTR/LPTSTR/PCTSTR
指向一8位或16位字符串类型指针
LPVOID
指向一个未指定类型的32位指针
LPDWORD
指向一个DWORD型指针
其他相似类型: LPHANDLE、LPINT、LPLONG、LPWORD、LPRESULT
整型
void *
32-bit
指向未知类型的指针
wchar_t
unsigned 16 bit
16位字符,比char可容纳更多
数
据
类
型
全
大
写
说明:这些Win32API支持的简单数据类型主要是用来定义函数返回值,消息参数,结构成员。这类数据类型大致可以分为五大类:字符型、布尔型、整型、指针型和句柄型(?).总共大概有100多种不同的类型,