电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> C++/VC>>Win32函数原型:

Win32函数原型

来源:www.cncfan.com | 2006-3-28 | (有4130人读过)

Win32函数原型分为普通、ANSI和Unicode三种。其实如果严格地说,并不能有普通这种分法,也就是只有ANSI和Unicode这两种。普通,一般都是MSDN开发文档中直接给出的形式。比如,下面是SetWindowText的普通原型:

BOOLSetWindowText(HWNDhwnd,LPCTSTRlpText);



实际上,包含SetWindowText函数声明的头文件具体是用宏实现的:

#ifdefUNICODE

#defineSetWindowTextSetWindowTextW

#else

#defineSetWindowTextSetWindowTextA

#endif//!UNICODE



预处理程序会根据是否定义了UNICODE将宏进行替换,替换后的函数不是ANSI版本就是Unicode版本。函数末尾的“A”代表“ANSI”,而“W”代表“Wide”。头文件中也分别包含了两种不同版本的函数原型声明:

ANSI原型:

BOOLWINAPISetWindowTextA(HWNDhWnd,LPCSTRlpString);

Unicode原型:

BOOLWINAPISetWindowTextW(HWNDhWnd,LPCWSTRlpString);



下面是winuser.h头文件中SetWindowText函数的声明及宏定义:

WINUSERAPI

BOOL

WINAPI

SetWindowTextA(

HWNDhWnd,

LPCSTRlpString);

WINUSERAPI

BOOL

WINAPI

SetWindowTextW(

HWNDhWnd,

LPCWSTRlpString);

#ifdefUNICODE

#defineSetWindowText SetWindowTextW

#else

#defineSetWindowText SetWindowTextA

#endif//!UNICODE

注意,在使用字符串参数时,普通原型使用的是LPCTSTR,ANSI原型使用的是LPCSTR,而Unicode原型使用的是LPCWSTR。



我们通常在自己的程序中使用普通原型的函数,在需要的时候才定义UNICODE,此时将使用函数的Unicode版本。如果不定义UNICODE,则默认使用函数的ANSI版本。当然,我们也可以在调用函数时,直接显示地使用ANSI版本或Unicode版本,具体方法就是在普通原型的函数加上“A”或者“W”,但我不太提倡这样做,因为容易发生混淆。



这种方法通常应用在使用字符串参数的函数中,一般情况下都是按正常的方式使用。什么是正常的方式?正常人用的都是正常的方式,你是正常人吗?呵呵。由于VB中使用的是Unicode,所以在VB中使用时一定要注意,我想熟悉VB的人这一点都很清楚。以“W”结尾的函数中的字符串参数均使用wide-character,即我们通常情况下看到的一个英文字符或一个汉字用2个字节存储,而有的函数是仅有Unicode版本的。



MSDN开发文档中关于函数的说明部分都有一个QuickInfo,QuickInfo中会说明该函数是否同时含有ANSI版本和Unicode版本。





*-------------------------------------------*

* 转载请通知作者并注明出处,CSDN欢迎您! *

* 作者:卢培培(goodname008) *

* 邮箱:goodname008@163.com *

* 专栏:http://blog.csdn.net/goodname008 *

*-------------------------------------------*

C++/VC热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2021 电脑爱好者 版权所有 备案号:鲁ICP备09059398号