VS2005设置UNICODE或ASCII字符集问题
VS2005开发程序时,默认的字符集是Unicode。所以如果程序中使用字符常量一定要显示转换为Unicode型,否则编译时报错。
如果你不希望程序支持Unicode字符集,更改项目设置就可以了。
project->properties->configurations Properties -> General ->Project Defaults -> Charater Set中将Unicode字符集改为未设置即可,或者改为使用多字节字符集。
在程序中使用各种字符集的方法:
const char * p = "Hello"; // 使用 ASCII 字符集
const char * p = "你好"; // 使用 MBCS 字符集,由于 MBCS 完全兼容 ASCII,多数情况下,我们并不严格区分他们
LPCSTR p = "Hello,你好"; // 意义同上
const WCHAR * p = L"Hello,你好"; // 使用 UNICODE 字符集
LPCOLESTR p = L"Hello,你好"; // 意义同上
// 如果预定义了_UNICODE,则表示使用UNICODE字符集;如果定义了_MBCS,则表示使用 MBCS
const TCHAR * p = _T("Hello,你好");
LPCTSTR p = _T("Hello,你好"); // 意义同上
在上面的例子中,T是非常有意思的一个符号(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一种中间类型,既不明确表示使用 MBCS,也不明确表示使用 UNICODE。那到底使用哪种字符集那?嘿嘿......编译的时候决定吧。设置条件编译的方式是:VC6中,"Project\Settings...\C/C++卡片 Preprocessor definitions" 中添加或修改 _MBCS、_UNICODE;VC.NET中,"项目\属性\配置属性\常规\字符集"
***************************************************************************************************************************************************************************
例如
HWND hwnd;
hwnd = CreateWindow(szWincls,"示例程序",WS_OVERLAPPEDWINDOW,
100,100,1100,600,NULL,NULL,hInstance,NULL);
在VS2008中将出错:cannot convert parameter 2 from 'char *' to 'LPCWSTR'
解决方法可如下:
wchar_t *szWincls = L"paint";
wchar_t *szTitle = L"示例程序";
HWND hwnd;
hwnd = CreateWindow(szWincls,szTitleWS_OVERLAPPEDWINDOW,
100,100,1100,600,NULL,NULL,hInstance,NULL);