【C语言】【windows】【入门笔记】 第二课--宽字符
erbi_lucifer吧
全部回复
仅看楼主
level 10
堕erbi 楼主

一楼度娘……[囧]



2012年04月23日 04点04分 1
level 10
堕erbi 楼主

一些在VC6里面可以使用的代码到了VS2010里面就不断报错有木有?[揉脸]
其实很多情况下是宽字符搞的鬼,VS2010的windows报错是宽字符编程。[瀑布汗~]
宽字符其实也没有什么神秘,又叫做Unicode。就是人家一个char字符占用一个字节而宽字符占用两个。为了显示中文。
Ascii码没有中文,因为计算机不是中国发明的,以前Ascii码足够了,但是中国人开始使用计算机了,于是要有中文(其它国家的我们不考虑),将两个Ascii合并在一起显示一个中文。
现在我们不需要考虑那么多,只需要学会怎样去使用……[来]

2012年04月23日 05点04分 2
level 10
堕erbi 楼主

下面分情况:
[鲁拉]
001.不使用宽字符。
002.使用宽字符。
003.都使用,自由变换。
【001.不使用】
许多函数需要宽字符作为参数,这时候你直接在该函数后面加上一个‘A’表示非宽字符版本。
如:MessageBox需要宽字符,里那么我们就使用 MessageBoxA 函数。
宽字符:
MessageBox(NULL,TEXT("我是内容"),TEXT("我是标题"),MB_OK);
非宽字符:
MessageBoxA(NULL,"我是内容","我是标题",MB_OK);
【002.使用】
多种方法:
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.

2012年04月23日 05点04分 3
level 10
堕erbi 楼主

以上就是宽字符的知识点……[打酱油]
下面来看一下一些变异的函数……宽字符版本[打酱油]

2012年04月23日 05点04分 4
level 10
堕erbi 楼主

加入头文件 tchar.h[背扭]
宽字符版本字符处理函数。
如:
strlen() //测字符串长度 ,不适用于宽字符
它的替代品是: wcslen() ,_tcslen(),lstrlen()等……
printf() 成了 wprintf()
strcpy() 成了 _tcscpy ()
strcmp() 成了 _tcscmp()
…… ……
[拍砖]
在VS2010里面使用strcat,_tcscat等函数会有警告,建议你使用 “XXXX函数”进行替换,那就根据它的提示做吧,就能去掉警告又不影响程序功能……

2012年04月23日 05点04分 5
level 10
堕erbi 楼主

例子:
#include<windows.h>
#include <tchar.h>
#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 ; //这个不解释……
}
[在笼子里]
效果:
得到了屏幕的分辨率……[Yeah]
注:在这里对看过《光影笔记》的朋友道歉,这个是得到屏幕分辨率的,不是得到窗体大小的……[拍砖]

2012年04月23日 05点04分 6
level 10
堕erbi 楼主

第二节下课……[心]
/*********************************************************************************************
    / \./ \/\_   I Hand You
  __{^\_ _}_  ) }/^\    A Rose...
 / /\_/^\._}_/ // /
( (__{(@)}\__}.//_/__A___A______A_______A______A____
 \__/{/(_)\_} )\\ \\---v----V-----V--Y----v---Y-----
  (  (__)_)_/ )\ \>
\__/   \__/\/\/ 光影:Erbi_lucifer吧
    \__,--' 时间:2012年4月23日13:52:17
/*********************************************************************************************

2012年04月23日 05点04分 7
level 1
[顶]
2012年04月27日 01点04分 8
level 9
mark
2012年05月03日 16点05分 9
1