搜档网
当前位置:搜档网 › vc数据类型详解

vc数据类型详解

VC++常用数据类型及其操作详解

-------西安邮电学院计算机系

徐兆元()

2004/08/03 目录

一.VC常用数据类型列表

二.常用数据类型转化

2.1数学类型变量与字符串相互转换

2.2CString及string,char *与其他数据类型的转换和操作

●CString,string,char*的综合比较

●数学类型与CString相互转化

●CString与char*相互转换举例

●CString 与BSTR 型转换

●V ARIANT 型转化成CString 型

2.3 BSTR、_bstr_t与CComBSTR

2.4 V ARIANT 、_variant_t 与COleVariant

附录CString及字符串转及操作详解

参考书籍:CSDN,<>

一.VC常用数据类型列表

说明:

(1)-------表示省略

(2)1Byte=8Bit,

字与机器有关,在8位系统中:字=1字节,16位系统中,1字=2字节,32位中:1字=4字节, 64位中1字=8字节.不要搞混这些概念.

二.常用数据类型转化及操作

2.1 数学类型变量与字符串相互转换(这些函数都在STDLIB.H里)

(1)将数学类型转换为字符串可以用以下一些函数:

举例: _CRTIMP char * __cdecl _itoa(int, char *, int);//这是一个将数字转换为一个字符串类型的函数,最后一个int表示转换的进制

如以下程序:

int iTyep=3;

char *szChar;

itoa(iType,szChar,2);

cout<

类似函数列表:

_CRTIMP char * __cdecl _itoa(int, char *, int);//为了完整性,也列在其中

_CRTIMP char * __cdecl _ultoa(unsigned long, char *, int);

_CRTIMP char * __cdecl _ltoa(long, char *, int);

_CRTIMP char * __cdecl _i64toa(__int64, char *, int);

_CRTIMP char * __cdecl _ui64toa(unsigned __int64, char *, int);

_CRTIMP wchar_t * __cdecl _i64tow(__int64, wchar_t *, int);

_CRTIMP wchar_t * __cdecl _ui64tow(unsigned __int64, wchar_t *, int);

_CRTIMP wchar_t * __cdecl _itow (int, wchar_t *, int);//转换为长字符串类型

_CRTIMP wchar_t * __cdecl _ltow (long, wchar_t *, int);

_CRTIMP wchar_t * __cdecl _ultow (unsigned long, wchar_t *, int);

还有很多,请自行研究

(2)将字符串类型转换为数学类型变量可以用以下一些函数:

举例: _CRTIMP int __cdecl atoi(const char *);//参数一看就很明了

char *szChar=”88”;

int temp(0);

temp=atoi(szChar);

cout<

类似的函数列表:

_CRTIMP int __cdecl atoi(const char *);

_CRTIMP double __cdecl atof(const char *);

_CRTIMP long __cdecl atol(const char *);

_CRTIMP long double __cdecl _atold(const char *);

_CRTIMP __int64 __cdecl _atoi64(const char *);

_CRTIMP double __cdecl strtod(const char *, char **);//

_CRTIMP long __cdecl strtol(const char *, char **, int);//

_CRTIMP long double __cdecl _strtold(const char *, char **);

_CRTIMP unsigned long __cdecl strtoul(const char *, char **, int);

_CRTIMP double __cdecl wcstod(const wchar_t *, wchar_t **);//长字符串类型转换为数学类型_CRTIMP long __cdecl wcstol(const wchar_t *, wchar_t **, int);

_CRTIMP unsigned long __cdecl wcstoul(const wchar_t *, wchar_t **, int);

_CRTIMP int __cdecl _wtoi(const wchar_t *);

_CRTIMP long __cdecl _wtol(const wchar_t *);

_CRTIMP __int64 __cdecl _wtoi64(const wchar_t *);

还有很多,请自行研究

2.2.CString及string,char *与其他数据类型的转换和操作

(1)CString,string,char*的综合比较(这部分CSDN上的作者joise的文章

<< CString,string,char*的综合比较>>写的很详细,请大家在仔细阅读他的文章.

地址: /

或参考附录:

(2)转换:

●数学类型与CString相互转化

数学类型转化为CString

可用Format函数,举例:

CString s;

int i = 64;

s.Format("%d", i)

CString转换为数学类型:举例

CString strValue("1.234");

double dblValue;

dblValue = atof((LPCTSTR)strValue);

●CString与char*相互转换举例

CString strValue(“Hello”);

char *szValue;

szValue=strValue.GetBuffer(szValue);

也可用(LPSTR)(LPCTSTR)对CString// 进行强制转换.

szValue=(LPSTR)(LPCTSTR)strValue;

反过来可直接赋值:

char *szChar=NULL;

CString strValue;

szChar=new char[10];

memset(szChar,0,10);

strcpy(szChar,”Hello”);

strValue=szChar;

●CString 与BSTR 型转换

CString 型转化成BSTR 型

当我们使用ActiveX 控件编程时,经常需要用到将某个值表示成BSTR 类型.BSTR 是一种记数字符串,Intel平台上的宽字符串(Unicode),并且可以包含嵌入的NULL 字符。

可以调用CString 对象的AllocSysString 方法将CString 转化成BSTR:

CString str;

str = .....; // whatever

BSTR bStr = str.AllocSysString();

BSTR型转换为CString

如果你在UNICODE 模式下编译代码,你可以简单地写成:

CString convert(BSTR bStr)

{

if(bStr == NULL)

return CString(_T(""));

CString s(bStr); // in UNICODE mode

return s;

}

如果是ANSI 模式

CString convert(BSTR b)

{

CString s;

if(b == NULL)

return s; // empty for NULL BSTR

#ifdef UNICODE

s = b;

#else

LPSTR p = s.GetBuffer(SysStringLen(b) + 1);

::WideCharToMultiByte(CP_ACP, // ANSI Code Page

0, // no flags

b, // source widechar string

-1, // assume NUL-terminated

p, // target buffer

SysStringLen(b)+1, // target buffer length

NULL, // use system default char

NULL); // don''t care if default used s.ReleaseBuffer();

#endif

return s;

}

●V ARIANT 型转化成CString 型

V ARIANT 类型经常用来给COM 对象传递参数,或者接收从COM 对象返回的值。你也能自己编写返回V ARIANT 类型的方法,函数返回什么类型依赖可能(并且常

常)方法的输入参数(比如,在自动化操作中,依赖与你调用哪个方法。IDispatch::Invoke 可能返回(通过其一个参数)一个包含有BYTE、WORD、float、double、date、BSTR 等等V ARIANT 类型的结果,(详见MSDN 上的V ARIANT 结构的定义)。在下面的例子中,假设类型是一个BSTR的变体,也就是说在串中的值是通过bsrtVal 来引用,其优点是在ANSI 应用中,有一个构造函数会把LPCWCHAR 引用的值转换为一个CString(见BSTR-to-CString 部分)。在Unicode 模式中,将成为标准的CString 构造函数,参见对缺省::WideCharToMultiByte 转换的告诫,以及你觉得是否可以接受(大多数情况下,你会满意的)。V ARIANT vaData;

vaData = m_com.YourMethodHere();

ASSERT(vaData.vt == VT_BSTR);

CString strData(vaData.bstrVal);

你还可以根据vt 域的不同来建立更通用的转换例程。为此你可能会考虑:CString VariantToString(V ARIANT * va)

{

CString s;

switch(va->vt)

{ /* vt */

case VT_BSTR:

return CString(vaData->bstrVal);

case VT_BSTR | VT_BYREF:

return CString(*vaData->pbstrVal);

case VT_I4:

s.Format(_T("%d"), va->lVal);

return s;

case VT_I4 | VT_BYREF:

s.Format(_T("%d"), *va->plVal);

case VT_R8:

s.Format(_T("%f"), va->dblVal);

return s;

... 剩下的类型转换由读者自己完成

default:

ASSERT(FALSE); // unknown V ARIANT type (this ASSERT is optional)

return CString("");

} /* vt */

}

2.3 BSTR、_bstr_t与CComBSTR

CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。

char *转换到BSTR可以这样:

BSTR b=_com_util::ConvertStringToBSTR("数据");///使用前需要加上头文件comutil.h 反之可以使用char *p=_com_util::ConvertBSTRToString(b);

2.4(引)V ARIANT 、_variant_t 与COleVariant

V ARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagV ARIANT 的定义。

对于V ARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:

V ARIANT va;

int a=2001;

va.vt=VT_I4;///指明整型数据

va.lVal=a; ///赋值

对于不马上赋值的V ARIANT,最好先用Void VariantInit(V ARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系: unsigned char bVal; VT_UI1

short iVal; VT_I2

long lVal; VT_I4

float fltVal; VT_R4

double dblVal; VT_R8

V ARIANT_BOOL boolVal; VT_BOOL

SCODE scode; VT_ERROR

CY cyVal; VT_CY

DATE date; VT_DA TE

BSTR bstrVal; VT_BSTR

IUnknown FAR* punkVal; VT_UNKNOWN

IDispatch FAR* pdispVal; VT_DISPATCH

SAFEARRAY FAR* parray; VT_ARRAY|*

unsigned char FAR* pbVal; VT_BYREF|VT_UI1

short FAR* piVal; VT_BYREF|VT_I2

long FAR* plVal; VT_BYREF|VT_I4

float FAR* pfltVal; VT_BYREF|VT_R4

double FAR* pdblVal; VT_BYREF|VT_R8

V ARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL

SCODE FAR* pscode; VT_BYREF|VT_ERROR

CY FAR* pcyVal; VT_BYREF|VT_CY

DATE FAR* pdate; VT_BYREF|VT_DATE

BSTR FAR* pbstrVal; VT_BYREF|VT_BSTR

IUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWN

IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH

SAFEARRAY FAR* FAR* pparray; VT_ARRAY|*

V ARIANT FAR* pvarVal; VT_BYREF|VT_V ARIANT

void FAR* byref; VT_BYREF

_variant_t是V ARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。

例如:

long l=222;

ing i=100;

_variant_t lVal(l);

lVal = (long)i;

COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:

COleVariant v3 = "字符串", v4 = (long)1999;

CString str =(BSTR)v3.pbstrVal;

long i = v4.lVal;

附录

CString,string,char*的综合比较

(一)概述

string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;

CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);

char*为C编程中最常用的字符串指针,一般以’\0’为结束标志;

(二)构造

?string是方便的,可以从几乎所有的字符串构造而来,包括CString和char*;

?CString次之,可以从基本的一些字符串变量构造而来,包括char*等;

?char*没有构造函数,仅可以赋值;

?举例:

char* psz = “joise”;

CString cstr( psz );

string str( cstr );

(三)运算符重载

a)operator=

?string是最方便的,几乎可以直接用所有的字符串赋值,包括CString和char*;

?CString次之,可以直接用些基本的字符串赋值,包括char*等;

?char*只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声

明的时候如未赋初值建议先设为NULL,以避免野指针,令你抓狂;

?举例:

char *psz = NULL;

psz = new char[10]; //当然,以上的直接写成char *psz = new char[10];也是一样

memset( psz, 0, 10 );

strcpy( psz, “joise” );

CString cstr;

cstr = psz;

string str;

str = psz;

str = cstr;

delete []psz;

b)operator+

?string与CString差不多,可以直接与char*进行加法,但不可以相互使用+运算符,即string

str = str + cstr是非法的,须转换成char*;

?char*没有+运算,只能使用strcat把两个指针连在一起;

?举例:

char* psz = “joise”;

CString cstr = psz;

cstr = cstr + psz;

string str = psz;

str = str + str + psz;

strcat( psz, psz );

strcat( psz, cstr );//合法

strcat( psz, str );//非法,由此可见,CString可自动转换为const char*,而string不行

c)operator +=

?string是最强大的,几乎可以与所有的字符串变量+=,包括CString和char*;

?CString次之,可以与基本的一些字符串变量进行+=而来,包括char*等;

?char*没有+=运算符,只能使用strcat把两个指针连在一起;

d)operator[]

?CString最好,当越界时会抛出断言异常;

?string与char*下标越界结果未定义;

?举例:

char* psz = “joise”;

CString cstr = psz;

cout << cstr[8];

string str = psz;

cout << str[8];

cout << psz[8];

e)operator== 、operator!=、operator> 、operator< 、operator>= 、perator<=

?CString与string之间不可以进行比较,但均可以与char*进行比较,并且比较的是值,而不

是地址;

cout << ( psz == cstr );

cout << ( psz == str );

cout << ( str == psz );

cout << ( cstr == psz );//以上代码返回均为1

(四) 常用算法

a) 查找

注:find_if 中是把范围内的值挨个代入匹配函数直至返回true

b) 比较

注:返回值如果<0则前面的值小于后面的值,反之亦然 c) 替换

d)

插入 e) 增加

f)截取

g)移除

h)转换大小写

i)与其他类型转换

j)格式化

k)得到长度

l)判断为空

m)重定义大小

n)释放资源

(五)安全性

CString > string > char*;

(六)灵活性

CString > string >char*;

(七)可移植性

char* = string > CString

(八)MFC中常用字符串结构图(此非比较,但为了方便查阅就一并算在这儿了)

(九)总结

综上所述,我个人认为,在MFC、ATL中使用字符串尽量使用CString,毕竟都是微软的孩子,各方面都比其它更有优势,而在非微软平台上或对移植性要求较高的场合推荐使用string,标准模板库提供了那么强大的泛型算法,没必要再自己去造车轮。

(十)参考文献

主要参考的是MSDN,就不一一列出了。

VC这MFC所有WM消息和数据类型总结

hwnd 32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可 视对象的句柄(窗口、对话框、按钮、编辑框等)。message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。lParam 通常是一个指向内存中数据的指针。由于WParam、lParam和Pointer 都是32位的,因此,它们之间可以相互转换。 WM_NULL =$0000 // WM_CREATE =$0001 //应用程序创建一个窗口 WM_DESTROY = $0002 //一个窗口被销毁 WM_MOVE = $0003 //移动一个窗口 WM_SIZE= $0005 //改变一个窗口的大小 WM_ACTIVATE= $0006 //一个窗口被激活或失去激活状态; WM_SETFOCUS= $0007 //获得焦点后 WM_KILLFOCUS= $0008 //失去焦点 WM_ENABLE= $000A //改变enable状态 WM_SETREDRAW= $000B //设置窗口是否能重画 WM_SETTEXT= $000C //应用程序发送此消息来设置一个窗口的文本 WM_GETTEXT = $000D //应用程序发送此消息来复制对应窗口的文本到缓冲区WM_GETTEXTLENGTH = $000E //得到与一个窗口有关的文本的长度(不包含空字符) WM_PAINT = $000F //要求一个窗口重画自己 WM_CLOSE = $0010 //当一个窗口或应用程序要关闭时发送一个信号 WM_QUERYENDSESSION= $0011 //当用户选择结束对话框或程序自己调用ExitWindows函数 WM_QUIT= $0012 //用来结束程序运行或当程序调用postquitmessage函数 WM_QUERYOPEN = $0013 //当用户窗口恢复以前的大小位置时,把此消息发送给某个图标 WM_ERASEBKGND = $0014 //当窗口背景必须被擦除时(例在窗口改变大小时)WM_SYSCOLORCHANGE = $0015 //当系统颜色改变时,发送此消息给所有顶级窗口WM_ENDSESSION = $0016 // 当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束 WM_SYSTEMERROR = $0017 // WM_SHOWWINDOW= $0018 //当隐藏或显示窗口是发送此消息给这个窗口 WM_ACTIVATEAPP = $001C //发此消息给应用程序哪个窗口是激活的,哪个是非激活的; WM_FONTCHANGE= $001D //当系统的字体资源库变化时发送此消息给所有顶级窗口 WM_TIMECHANGE= $001E //当系统的时间变化时发送此消息给所有顶级窗口 WM_CANCELMODE= $001F //发送此消息来取消某种正在进行的摸态(操作) WM_SETCURSOR = $0020 //如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口 WM_MOUSEACTIVATE = $0021 //当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口

VC变量命名规则

转载:vc软件开发规范 -------------------------------------------------------------------------------- 一、程序风格: 1、严格采用阶梯层次组织程序代码: 各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行。要求相匹配的大括号在同一列,对继行则要求再缩进4格。例如: 2、提示信息字符串的位置 在程序中需要给出的提示字符串,为了支持多种语言的开发,除了一些给调试用的临时信息外,其他所有的提示信息必须定义在资源中。 3、对变量的定义,尽量位于函数的开始位置。 二、命名规则: 1、变量名的命名规则 ①、变量的命名规则要求用“匈牙利法则”。即开头字母用变量的类型,其余部分用变量的英文意思或其英文意思的缩写,尽量避免用中文的拼音,要求单词的第一个字母应大写。 即:变量名=变量类型+变量的英文意思(或缩写) 对非通用的变量,在定义时加入注释说明,变量定义尽量可能放在函数的开始处。 见下表: bool(BOOL) 用b开头 bIsParent byte(BYTE) 用by开头 byFlag short(int) 用n开头 nStepCount long(LONG) 用l开头 lSum char(CHAR) 用c开头 cCount float(FLOA T) 用f开头 fAvg double(DOUBLE) 用d开头 dDeta void(VOID) 用v开头 vV ariant unsigned int(WORD)用w开头 wCount unsigned long(DWORD) 用dw开头 dwBroad HANDLE(HINSTANCE)用h开头 hHandle DWORD 用dw开头 dwWord LPCSTR(LPCTSTR) 用str开头 strString 用0结尾的字符串用sz开头 szFileName 对未给出的变量类型要求提出并给出命名建议给技术委员会。 ②、指针变量命名的基本原则为: 对一重指针变量的基本原则为: “p”+变量类型前缀+命名 如一个float*型应该表示为pfStat 对多重指针变量的基本规则为: 二重指针:“pp”+变量类型前缀+命名 三重指针:“ppp”+变量类型前缀+命名 ...... ③、全局变量用g_开头,如一个全局的长型变量定义为g_lFailCount,即:变量名=g_+变量类型+变量的英文

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: 0 decimal表示小数点的位置,sign表示符号:0为正数,1为

负数 CString变量 str = "2008北京奥运"; buf = (LPSTR)(LPCTSTR)str; BSTR变量 BSTR bstrValue = ::SysAllocString(L"程序员"); char * buf = _com_util::ConvertBSTRToString(bstrValue); SysFreeString(bstrValue); 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中的内容 AfxMessageBox(buf); 通用方法(针对非COM数据类型) 用sprintf完成转换 char buffer[200]; char c = '1';

在VC6.0下面数据类型装换

C/C++与MFC数据类型转换 一.string,CString,int,char*之间的相互转换 1. //-------- int ---> CString--------------// /* int a = 3; CString str; str.Format("%d",a); MessageBox(str); */ 2. //---------string ---> CString-----------// /* string str = "abcd"; CString cstr; //错误的写法 //cstr.Format("%s",str); //运行出错 cstr.Format("%s",str.c_str()); MessageBox(cstr); */ 3. //----------char * ---> CString-------------// /* char *ch; ch = "abcdef" ; CString str ; //有两种方法 //str.Format("%s",ch); //str =ch; MessageBox(str); */ 4. //-----------CString ---> char * ------------// /* CString cstr = "abcdefg" ; char *ch = cstr.GetBuffer(cstr.GetLength()); char *ch = (char *)LPCTSTR(cstr); MessageBox(ch);/ * 5. //----------CString --->char[100]------------//

VC++常用数据类型及其操作详解

VC++常用数据类型及其操作详解 ―――――――――――――――――――――目录――――――――――――――――――――― 一、VC常用数据类型列表 二、常用数据类型转化 2.1数学类型变量与字符串相互转换 2.2 CString及string,char *与其他数据类型的转换和操作 ●CString,string,char*的综合比较 ●数学类型与CString相互转化 ●CString与char*相互转换举例 ●CString 与 BSTR 型转换 ●VARIANT 型转化成 CString 型 2.3 BSTR、_bstr_t与CComBSTR 2.4 VARIANT 、_variant_t 与 COleVariant 附录CString及字符串转及操作详解 参考书籍:CSDN,<> ―――――――――――――――――――――――――――――――――――――――――――― 一、VC常用数据类型列表

说明: (1)-------表示省略 (2)1Byte=8Bit, 字与机器有关,在8位系统中:字=1字节,16位系统中,1字=2字节,32位中:1字=4字节, 64位中1字=8字节.不要搞混这些概念. 二.常用数据类型转化及操作 2.1 数学类型变量与字符串相互转换(这些函数都在STDLIB.H里) (1)将数学类型转换为字符串可以用以下一些函数: 举例: _CRTIMP char * __cdecl _itoa(int, char *, int);//这是一个将数字转换为一个字符串类型的函数,最后一个int表示转换的进制 如以下程序: int iTyep=3; char *szChar;

VC++中DC的概念

VC++中关于DC(设备环境函数(Device Context))的理解 问:设备描述表DC是一个什么概念,谁通俗的说说,先谢了 学习VC,首先遇到的就是这个DC,即设置描述表,输出文字,绘图都要用这个,好象它太重要了。但是我就是不明白,这是什么东西。 一些教程看了,但还是不太了解,谁能通俗的说说,能快速理解它,谢谢。 答:1、作画之前需要准备好画布、画笔、调色板等。 当使用GDI函数如MoveToEx/LineTo, TextOut时,只是告诉系统要划线或写字了,但用什么样的笔(HPEN),字是什么颜色(SetTextColor),画在哪张“纸”(HBITMAP)上需要从一个由系统定义的数据结构中去读取。 这个数据结构被称为Device Context(DC)。 换句话说,GDI函数只是绘画的动作,而DC则保存了绘画所需的材料和工具。 2、设备环境函数(Device Context) 设备环境是一个结构,它定义了一系列图形对象及其相关的属性,以及会影响输出结果的绘图方式。这些图形对象包括:画笔(用于画直线),笔刷(用于绘图和填充),位图(用于屏幕的拷贝或滚动),调色板(用于定义可用的颜色集),剪裁区(用于剪裁和其他操作),路径(用于绘图和画图操作)。设备环境函数用于对设备环境进行创建、删除或获取信息。 问:DC,CDC,HDC,CClientDC....有什么本质的区别? 答:都是DC嘛,HDC就是最原始的DC 句柄,很多API的第一个参数就是一个HDC 类型,比如 HDC hDC = ::GetDC( m_hWnd); ::MoveToEx( hDC, 0, 0, NULL ); ::LineTo( hDC, 0, 100, ); ::ReleaseDC( m_hWnd, hDC ); 在MFC中,为了将API封装成一个类来操作,因此多出来了一个CDC。所以在MFC中,都是 CDC dc = GetDC(); dc.MoveTo( 0, 0 );

VC++与Delphi XE变量类型对应关系

Delphi与C/C++类型对照表 Delphi数据类型C/C++ ShorInt8位有符号整数char Byte8位无符号整数BYTE,unsigned short SmallInt16位有符号整数short Word16位无符号整数unsigned short Integer,LongInt32位有符号整数int,long Cardinal,LongWord/DWORD32位无符号整数unsigned long Int6464位有符号整数_int64 Single4字节浮点数float *Real486字节浮点数 Double8字节浮点数double *Extended10字节浮点数long double Currency64位货币类型 TDate/TDateTime8字节日期/时间 Variant,OleVariant16字节可变类型VARIANT,^Variant,^OleVariant Char,AnsiChar1字节字符char WideChar2字节字符WCHAR *ShortString短字符串 AnsiString/String长字符串^AnsiString WideString宽字符串^WideString PChar,PAnsiChar NULL结束的字符串char* PWideChar NULL结束的宽字符 串 LPCWSTR Boolean,ByteBool1字节布尔类型任何1字节WordBool2字节布尔类型任何2字节BOOL,LongBool4字节布尔类型BOOL 注:有*前缀的是向前兼容类型;有^前缀的是C++Builder特有类型。 C/C++Delphi ABC TABC ACCEL TAccel ATOM TAtom BITMAP TBitMap BITMAPCOREHEADER TBitmapCoreHeader BITMAPCOREINFO TBitmapCoreInfo BITMAPFILEHEADER TBitmapFileHeader BITMAPINFO TBitmapInfo BITMAPINFOHEADER TBitmapInfoHeader BOOL Bool CBT_CREATEWND TCBT_CreateWnd CBTACTIVATESTRUCT TCBTActivateStruct CHAR Char

vc数据类型详解

VC++常用数据类型及其操作详解 -------西安邮电学院计算机系 徐兆元() 2004/08/03 目录 一.VC常用数据类型列表 二.常用数据类型转化 2.1数学类型变量与字符串相互转换 2.2CString及string,char *与其他数据类型的转换和操作 ●CString,string,char*的综合比较 ●数学类型与CString相互转化 ●CString与char*相互转换举例 ●CString 与BSTR 型转换 ●V ARIANT 型转化成CString 型 2.3 BSTR、_bstr_t与CComBSTR 2.4 V ARIANT 、_variant_t 与COleVariant 附录CString及字符串转及操作详解 参考书籍:CSDN,<> 一.VC常用数据类型列表

说明: (1)-------表示省略 (2)1Byte=8Bit, 字与机器有关,在8位系统中:字=1字节,16位系统中,1字=2字节,32位中:1字=4字节, 64位中1字=8字节.不要搞混这些概念. 二.常用数据类型转化及操作 2.1 数学类型变量与字符串相互转换(这些函数都在STDLIB.H里) (1)将数学类型转换为字符串可以用以下一些函数: 举例: _CRTIMP char * __cdecl _itoa(int, char *, int);//这是一个将数字转换为一个字符串类型的函数,最后一个int表示转换的进制 如以下程序: int iTyep=3;

char *szChar; itoa(iType,szChar,2); cout<

VC常用数据类型列表

一.VC常用数据类型列表 二.常用数据类型转化 2.1数学类型变量与字符串相互转换 2.2 CString及string,char *与其他数据类型的转换和操作 ●CString,string,char*的综合比较 ●数学类型与CString相互转化 ●CString与char*相互转换举例 ●CString 与BSTR 型转换 ●VARIANT 型转化成CString 型 2.3 BSTR、_bstr_t与CComBSTR 2.4 VARIANT 、_variant_t 与COleVariant 附录CString及字符串转及操作详解 参考书籍:CSDN,<> 一.VC常用数据类型列表 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 整型 void * 32-bit 指向未知类型的指针 wchar_t unsigned 16 bit 16位字符,比char可容纳更多的字符 Win32 说明: 这些Win32API支持的简单数据类型主要是用来定义函数返回值,消息参数,结构成员。这类数据类型大致可以分为五大类:字符型、布尔型、整型、指针型和句

Vc++程序设计课程教学大纲

《VC++程序设计》课程教学大纲 总学时:54 学分:3 理论学时:34 实验学时:20 面向专业:计算机科学与技术课程代码:2710015 先开课程:数据结构、C语言、面向对象程序设计课程性质:选修 执笔人:张磊审定人:陈龙猛、于仁师 第一部分:理论教学部分 一、说明 1、课程的性质、地位和任务 《VC++程序设计》最重要的任务是发展学生的智力,即编程、上机调试能力,具体到教学内容上则是重在使学生掌握理论教学中的重点和难点,对VC++语言的编程技巧能熟练掌握,提高自身的编程能力,加强素质教育。注重从事理论研究、实验工作的能力和严谨的科学作风的培养,提倡创新精神。 2、课程教学和教改基本要求 本课程主要讲解Visual C++6.0的语法结构、体系结构、各种组件,以及微软在Visual C++6.0中推出的各种新技术。通过本课程的学习,使学生熟悉采用面向对象编程语言进行Windows 可视化开发,掌握面向对象的编程思想,熟悉面向对象编程的消息响应。 本课程主要采用多媒体教室讲课,讲课与上机实验相结合,并辅以实际应用案例、常见问题分析等,巩固所学内容,基本要求如下: (1)掌握面向对象程序设计的基本概念 (2)熟悉Visual C++集成开发环境 (3)掌握Visual C++语言的基本内容、常用的算法 (4)理解WINDOWS的消息机制和WINDOWS应用程序的基本结构 (5)掌握MFC的基本概念,窗口、资源、图形设备接口、文档/视图结构、对话框和控件等对象的程序设计方法 (6)可用Visual C++开发基本的WINDOWS应用程序

二、教学内容与课时分配 第一章 Visual c++概述(学时数:1) 本章将重点介绍Visual c++的总体功能和特点,具体讲述Visual c++6.0版的安装过程,并详细介绍。 教学内容: 1、Visual c++开发环境、Visual c++向导、Visual c++应用程序环境。 2、Visual c++安装过程。 3、Visual c++菜单栏、Visual c++工具栏、Visual c++工作区、Visual c++资源编辑器。本章重点难点:Visual c++6.0版开发环境的熟悉 建议教学方法:先讲解主要知识点,再通过多媒体演示达到教学效果。 思考题 1、Visual c++的安装有什么要求? 2、Visual c++的帮助文件如何安装? 3、简单描述Visual c++开发环境? 第二章使用Visual c++创建控制台程序(学时数:2)本章主要通过一个具体实例——“Hello World”程序,演示Visual c++开发环境下建立一个控制台程序的完整过程。 教学内容: 1、创建“Hello world”程序的基本步骤。 2、创建控制台程序的输入、输出。 3、熟悉控制台程序句柄与I/O。 4、解析控制台程序窗口。 本章重点难点:Visual c++6.0版开发环境的熟悉 建议教学方法:先讲解主要知识点,再通过实例讲解进行巩固 思考题 1、如何控制自定义控制台程序的输入、输出? 2、如何读取控制台程序中的文字与背景? 3、如何在控制台窗口的指定部位写入指定的字符信息?

VC和VB数据类型比较

API Platform SDK: COM Translating to Visual Basic from C++ Using the C++ programming language, developers can directly access the memory that stor es a particular variable. Memory pointers provide this direct access. In Visual Basic, pointers are handled for you. For example, a parameter declared as a pointer to an int in C++ is equivalent to a parameter declared in Visual Basic as a ByRef Integer. A parameter that is declared As String in Visual Basic is declared as a pointer to a BSTR i n C++. Setting a string pointer to NULL in C++ is equivalent to setting the string to the vb NullString constant in Visual Basic. Passing in a zero-length string ("") to a function design ed to receive NULL does not work, as this passes a pointer to a zero-length string instead o f a zero pointer.

VC语法汇总

VC++语法知识汇总 第2章运算符 基本成份关键字:由小写字母组成; 标识符:运算对象名,由字母、数字和下划线组成,不能以数字开头、不能是关键字,大小写严格区分; 运算符:<<, +, = =等表示指定运算; 常量:具体的数据; 串:用双引号括起来的字符序列; 特殊符号:{, }, //, #, (, )等。 1.常量 整型:十进制;八进制(0开头,由0~7组成);十六进制(0x开头,由0~9和A~F组成)实型:小数形式(由0~9和小数点组成);指数形式(尾数e指数,尾数和指数必须有值,指数为整数) 字符型:单引号引起的单个字符或转义序列,转义序列由\开头,后跟对应字符的ACSII码(用八或十六进制数表示,默认为八进制数)或字符 标识符常量(符号常量)的定义方法:编译预处理指令#define 标识符常量名常量值 常量说明符const 类型标识符常量名=常量值;2.变量 变量在使用前,必须有值。 说明格式:[存储类型] 数据类型变量名1 [, 变量名2, , 变量名n]; 变量说明时直接赋初值:[存储类型] 数据类型变量名=值; 变量先说明后赋值:[存储类型] 数据类型变量名; 变量名=表达式; 3.运算符与表达式 (1)算术运算符:+、-、*、/(除)、%(求余) %只对整数操作,/和%的除数(右操作数)不能为0 (2)关系运算符:<、<=、>、>=、==(相等比较)、!=(不等比较) 操作数非0为真、0为假;运算结果真为1、假为1,且继续参加运算。(3)逻辑运算符:!(非)、&&(与)、||(或) 运算规则:非真即假,&&运算时操作数中有一个为0(假)时为假,||运算时操作数全为0(假)时为假;括号优先,同层的优先顺序为!、&&、||,从左到右,一旦能确定结果值,停止运算。 (4)赋值运算符:=、+=、-=、*=、/=、%=等 左操作数必须为变量;先计算右操作数;i*=j+2等价于i=i*(j+2) (5)自增自减运算符:++、- - 操作数为变量,运算符的位置会影响两个值(前置:表达式为运算前的变量值,变量自增自减1;前置:变量自增自减1,表达式为运算后的变量值) (6)逗号运算符:, 从左到右依次计算各操作数,最后一个操作数的值为表达式的值。 (7)条件运算符:?: 操作数1的值为真(非0),表达式取操作数2的值,否则表达式取操作数3的值。 优先级:一元运算(一个操作数),二元运算(算术运算、关系运算、逻辑运算,赋值运算),条件运算,逗号运算

c++各种数据类型之间相互转化

⑴. char *转换到BSTR BSTR b = _com_util::ConvertStringToBSTR("数据"); SysFreeString(bstrValue); (2).BSTR转换到char* char *p=_com_util::ConvertBSTRToString(b); delete p; 12.typedef和typename要害字 这两个要害字在运用的时辰时例会令人迷惑,其实很简单,typedef是类型定义, 而typename是类型解释2009年04月20日 类型转换是将一种类型的值映射为另一种类型的值进行数据类型的转换 是在实际代码编写中经常遇到的问题,出格是字符串和其它类型的转换 1.将字符串转换为整儿 (1).转换函数 // 双精度函数 double atof( const char *string ); double _wtof( const wchar_t *string ); 自适应 TCHAR:_tstof 、_ttof

VS2005:_atof_l 、_wtof_l 、_atodbl 、_atodbl_l // 整型函数 int atoi( const char *string ); _int64 _atoi64( const char *string ); int _wtoi( const wchar_t *string ); _int64 _ wtoi64( const char *string ); 自适应 TCHAR:_tstoi 、_ttoi 、_tstoi64 、_ttoi64 VS2005:_atoi_l 、_wtoi_l 、_atoi64_l 、_wtoi64_l //长整形函数 long atol( const char * string ); long _wtol(

VC++基本数据类型

VC基础数据类型大全 2010-07-04 20:43:28| 分类:C++学习|字号订阅 字符类 标识符实际类型意义 1.CHAR char 8位Windows(ANSI)字符。 https://www.sodocs.net/doc/6918827049.html,HAR char 8位Windows(ANSI)字符。 3.PSZ char* 一个以"NULL"结束的Windows字符串的指针 4.PCHAR CHAR* 一个CHAR型指针 5.PSTR CHAR* 一个以"NULL"结尾的8位Windows(ANSI)字符串指针 6.LPSTR CHAR* 一个以"NULL"结尾的8位WINDOWS(ANSI)字符串指针 7.NPSTR CHAR* 一个以"NULL"结尾的8位WINDOWS(ANSI)字符串指针 8.PCSTR CONST CHAR* 一个以"NULL"结尾的8位WINDOWS(ANSI)字符串常量 指针 9.LPCSTR CONST CHAR* 一个以"NULL"结尾的8位WINDOWS(ANSI)字符串常量 指针 10.WCHAR wchar_t 16位Unicode字符 11.PWCH WCHAR* 一个WCHAR型指针 12.PWCHAR WCHAR* 一个WCHAR型指针 13.PWSTR WCHAR* 一个以"NULL"结尾的16位Unicode字符串指针 14.LPWSTR WCHAR FAR* 一个以"NULL"结尾的16位Unicode字符串指针 15.NWPSTR WCHAR* 一个以"NULL"结尾的16位Unicode字符串指针 16.PCWCH CONST WCHAR* 一个WCHAR型常量指针 17.LPCWCH CONST WCHAR FAR* 一个WCHAR型常量指针 18.PCWSTR CONST WCHAR* 一个以"NULL"结束的16位Unicode字符串常量指针 19.LPCWSTR CONST WCHAR FAR* 一个以"NULL"结尾的16位Unicode字符串常 量指针 20.TCHAR WCHAR(或char) 兼容型字符(Unicode中为WCHAR型,Windows中为 CHAR型) 21.PTCHAR WCHAR*(或char) 一个TCHAR型指针 22.PTCH LPWSTR(或LPSTR) Unicode中为LPWSTR型,Windows中为LPSTR型 23.LPTCH LPWSTR(或LPSTR) Unicode中为LPWSTR型,Windows中为LPSTR型 24.PTSTR LPWSTR(或LPSTR) Unicode中为LPWSTR型,Windows中为LPSTR型 25.LPTSTR LPWSTR(或LPSTR) Unicode中为LPWSTR型,Windows中为LPSTR型

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,tep,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′ d ecimal: 1 sign: 0 decimal表示小数点的位置,sign表示符号:0为正数,1为负数 CString变量 str = “2008北京奥运”; buf = (LPSTR)(LPCTSTR)str; BSTR变量 BSTR bstrValue = ::SysAllocString(L”程序员”); char * buf = _com_util::ConvertBSTRToString(bstrValue); SysFreeString(bstrValue); AfxMessageBox(buf); delete(buf); CComBSTR变量 CComBSTR bstrVar(”test”); char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str); AfxMessageBox(buf); delete(buf);

VC+SQL数据库

VC++ 6.0/SQL Server 图书管理系统指南该实验主要采用了ADO(ActiveX Data Objects)数据库访问技术,以开发图书管理系统为例,逐一介绍VC++ 6.0开发数据库的基本方法。主要任务是连接MFC程序和数据库,完成基本的图书信息的操作。 1、创建图书管理系统主框架 创建主框架是设计图书信息管理系统的第一步,有了框架以后才可以在其中添加对话框、控件、菜单等并实现相关功能。

单击Data Source按钮, 按“下一步”按钮

选择数据库表 之后的返回VC创建工程界面,单击“完成”按钮,进入VC++编程框架 2、VC++程序和数据库连接的桥梁。ADO有最重要的三个对象:Connection、Command和 Recordset,分别代表“连接”对象、“命令”对象和“记录集”对象。首先要添加ADO Data Control控件。 (1)选择菜单项的“工程”--→“增加到工程”---→“Components And Controls…”,选 择Registered ActiveX Controls文件夹

(2)再选择Microsoft ADO Data Control 6.0 (SP4) (OLEDB)控件,然后Insert,选择Microsoft DataGrid Control 6.0 (SP5) (OLEDB)控件。后文将这两个控件简称ADODC 和DataGrid控件。 (3)在资源视图上单击Dialog文件夹左边的小加号,定位到IDD_LIB_FORM,选中“TODO: 在这个对话框里设置表格控制。”,按“Delete”键将其删除。从工具栏拉人ADODC和DataGrid控件到该对话框上。右键单击ADODC控件,单击“属性” 项,打开ADODC的属性页,选择“control”页,设置Use Connection String属性。 单击“Build”(生成连接字符串)按钮。此后的操作如上面Data Source设置步骤一样。 (4)选择“RecordSource”页,设置ADODC的RecorSource属性。后操作如下: (5)打开DataGrid控件的属性对话框,定位到“ALL”页。然后选择“DataSource”一

VC++宏定义数据类型大全

VC++宏定义数据类型大全 类型含义 ATOM Atom. For more information, see Atoms. BOOL Boolean variable (should be TRUE or FALSE). BOOLEAN Boolean variable (should be TRUE or FALSE). BYTE Byte (8 bits). CALLBACK Calling convention for callback functions. CHAR8-bit Windows (ANSI) character. For moreinformation, see Character Sets Used By Fonts. COLORREF Red, green, blue (RGB) color value (32 bits). See COLORREF for information on this type. CONST Variable whose value is to remain constant duringexecution. DWORD32-bit unsigned integer. DWORD_PTR Unsigned long type for pointer precision. Use whencasting a pointer to a long type to perform pointer arithmetic.(Also commonly used for general 32-bit parameters that have beenextended to 64 bits in 64-bit Windows. ) DWORD3232-bit unsigned integer. DWORD6464-bit unsigned integer. FLOAT Floating-point variable. HACCEL Handle to an accelerator table. HANDLE Handle to an object. HBITMAP Handle to a bitmap. HBRUSH Handle to a brush. HCONV Handle to a dynamic data exchange (DDE)conversation. HCONVLIST Handle to a DDE conversation list. HCURSOR Handle to a cursor. HDC Handle to a device context (DC). HDDEDATA Handle to DDE data. HDESK Handle to a desktop. HDROP Handle to an internal drop structure. HDWP Handle to a deferred window position structure. HENHMETAFILE Handle to an enhanced metafile. HFILE Handle to a file opened by OpenFile, not CreateFile. HFONT Handle to a font. HGDIOBJ Handle to a GDI object. HGLOBAL Handle to a global memory block. HHOOK Handle to a hook.

相关主题