Windows数据类型以及宽字符

Windows API自行定义了一些关键字,用来定义Windows中函数中的有关参数和返回值的大小和意义,通常将它们看作Windows的数据类型。其中较常用的有:

关键字                 类型                            说明

BOOL                   逻辑类型                     等价于int

BOOLEAN            逻辑类型                     等价于BYTE

BYTE                   字节                            等价于unsigned char

CHAR                   字符                            等价于char

DOUBLE        双精度                  等价于double

DWORD               双字                            等价于unsigned long

FLOAT                 浮点数                  等价于float

HANDLE              句柄                            等价于void

INT                      整数                            等价于int

LONG                  长整数                  等价于long

SHORT                 短整数                  等价于short

UCHAR                 无符号字符           等价于unsigned char

UINT                    无符号整数           等价于unsigned int

ULONG                无符号长整数              等价于unsigned long

USHORT               无符号短整数              等价于unsigned short

VOID                   空的、无定义              等价于void

WCHAR                双字节码                     等价于unsigned short

wchar_t                双字节码                     等价于unsigned short

WORD                 字                         等价于unsigned short

WPARAM             消息参数                     等价于UINT

LPARAM              消息参数                     等价于LONG

LRESULT             消息返回值           等价于LONG

HINSTANCE         实例句柄                     等价于unsigned long

HWND                 窗口句柄                     等价于unsigned long

HDC                     设备环境句柄              等价于unsigned long

TCHAR                 字符                            等价于char

LPSTR                 字符指针                     等价于char *

LPCSTR               常量字符指针              等价于const char *

LPTSTR               字符指针                     等价于TCHAR *

LPCTSTR             常量字符指针              等价于const TCHAR *

LPVOID               无类型指针           等价于void *

       LPCVOID             无类型常量指针    等价于const void *

其中句柄(handle)是Windows编程的一个关键性的概念,编写Windows应用程序总是要和各种句柄打交道。所谓句柄,就是一个4字节长的唯一的数,用以标识许多不同的对象类型,如窗口、菜单、内存、画笔、画刷、电话线路等。

由于Windows是一个多任务操作系统,它可以同时运行多个程序或一个程序的多个副本。这些运行的程序称为一个实例。为了对同一程序的多个副本进行管理,Windows引入了实例句柄。Windows为每个应用程序建立一张表,实例句柄就好象是这张表的一个索引。

Windows不仅使用句柄来管理实例,也用它来管理窗口、位图、字体、元文件、图标等系统资源。

Windows NT系统支持Unicode。所谓Unicode,即统一双字节内码。我们知道,计算机中的西文信息使用单字节内码(8位2进制码,即ASCII码)。为了处理象中文这样的大字符集,国内、台湾和日本等使用汉字的国家各自定义了不同的双字节内码标准,如大陆的GB码、台湾的BIG5码和日本的JIS码等。但不同的内码系统不能通用,例如以BIG5码输入的文字在GB码系统下不可辨认。因此,国际标准化组织提出了通用的大字符集标准,这就是Unicode码。为了在应用程序中使用Unicode码,就必须使用wchar_t或WCHAR代替char和CHAR类型处理字符。但因目前仅Windows NT支持Unicode,所以为了使所开发的应用程序具有一定的通用性,可用TCHAR类型代替CHAR或WCHAR类型。TCHAR类型可根据需要自动定义为CHAR或WCHAR类型。

宽字符其实也没有什么神秘,又叫做Unicode。就是人家一个char字符占用一个字节而宽字符占用两个。为了显示中文。
Ascii码没有中文,因为计算机不是中国发明的,以前Ascii码足够了,但是中国人开始使用计算机了,于是要有中文(其它国家的我们不考虑),将两个Ascii合并在一起显示一个中文。

许多函数需要宽字符作为参数,这时候你直接在该函数后面加上一个‘A’表示非宽字符版本。
       如:MessageBox需要宽字符,里那么我们就使用 MessageBoxA 函数。
       宽字符:MessageBox(NULL,TEXT("我是内容"),TEXT("我是标题"),MB_OK);
      非宽字符:MessageBoxA(NULL,"我是内容","我是标题",MB_OK);

多种方法:
       001.将你的字符串放入 TEXT() 里面,就是宽字符版本了。
       002.在你的字符串前面加上‘L’即可,如:L"我是内容"。
       003.将你的字符串放入 _T() 里面,就是宽字符版本了,(需要tchar.h 头文件)
      也就是说,以下是相同的:

#include<tchar.h>
MessageBox(NULL,TEXT("我是内容"),TEXT("我是标题"),MB_OK);
    MessageBox(NULL,L"我是内容",L"我是标题"MB_OK);
    MessageBox(NULL,_T("我是内容"),_T("我是标题"),MB_OK);

在VS2010里面,你可以直接使用 TCHAR 定义宽字符,使用char定义非宽字符。
       TCHAR File[255];
       char file[255];
       然后在需要的时候可以进行转换:
      宽字符转普通字符:WideCharToMultiByte(); 
      普通字符转宽字符:MultiByteToWideChar(); 
      详细参数可以在百度百科找到。 
      初学的话可以直接:
      宽字符转普通字符 
      WideCharToMultiByte(0,0,File,255,file,255,0,0);
      普通字符转宽字符:
      MultiByteToWideChar(0,0,file,255,File,255);
      要转化的放前面,转化后的放后面,那些数字是转化个数,其它置0.
     加入头文件 tchar.h
    宽字符版本字符处理函数。
   如:
    strlen() //测字符串长度 ,不适用于宽字符 
   它的替代品是: wcslen() ,_tcslen(),lstrlen()等…… 
   printf() 成了 wprintf()
   strcpy() 成了 _tcscpy ()
   strcmp() 成了 _tcscmp()
…… ……
简单的例子:

#include<windows.h>

#include <tchar.h> 

<strong><span style="font-size:18px;">#include <stdio.h>
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
   { 
   int x, y;
   TCHAR String[255];
   x = GetSystemMetrics (SM_CXSCREEN) ; //屏幕的宽 
   y= GetSystemMetrics (SM_CYSCREEN) ; //屏幕的高 
   wsprintf(String, TEXT ("你的屏幕宽 %d pixels 高 %d pixels……不信量一量 "),x,y); 
   MessageBox(NULL,String,TEXT("测量测量……"),MB_OK);
   return 0 ; //这个不解释……
   }</span></strong>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值