VS2008中Unicode的解决办法

[cpp]  view plain copy
  1. #include <windows.h>  
  2.   
  3. LRESULT CALLBACK WndProc(HWNDUINTWPARAMLPARAM);  
  4.   
  5. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance,  
  6.                      LPSTR lpCmdLine, int nCmdShow)  
  7. {  
  8.     WNDCLASS wndclass;  
  9.     HWND hwnd;  
  10.     MSG msg;  
  11.   
  12.     //窗口属性  
  13.     wndclass.style = CS_HREDRAW | CS_VREDRAW;  
  14.     wndclass.lpfnWndProc = WndProc;  
  15.     wndclass.cbClsExtra = 0;  
  16.     wndclass.cbWndExtra = 0;  
  17.     wndclass.hInstance = hInstance;  
  18.     wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);  
  19.     wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);  
  20.     wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);  
  21.     wndclass.lpszMenuName = NULL;  
  22.     wndclass.lpszClassName = "shang1";  
  23.   
  24.     //注册  
  25.     if (!RegisterClass(&wndclass))  
  26.         return FALSE;  
  27.       
  28.     //创建窗口  
  29.     hwnd = CreateWindow("shang1""shang1", WS_OVERLAPPEDWINDOW,  
  30.         CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,  
  31.         NULL, NULL, hInstance, NULL);  
  32.   
  33.     //显示窗口  
  34.     ShowWindow(hwnd, nCmdShow);  
  35.   
  36.     //更新窗口的客户区  
  37.     UpdateWindow(hwnd);  
  38.   
  39.     //消息循环  
  40.     while (GetMessage(&msg, NULL, 0, 0))//获取消息,遇WM_QUIT退出循环  
  41.     {  
  42.         TranslateMessage(&msg);//键盘消息转换  
  43.         DispatchMessage(&msg);//消息给窗口函数  
  44.     }  
  45.     return msg.wParam;  
  46.   
  47. }  
  48.   
  49. LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)  
  50. {  
  51.     switch(message)  
  52.     {  
  53.     case WM_PAINT:  
  54.         HDC hdc;  
  55.         PAINTSTRUCT ps;  
  56.         hdc = BeginPaint(hwnd, &ps);  
  57.         TextOut(hdc, 20, 30, "The First Windows Application Showing Window",  
  58.             strlen("The First Windows Application Showing Window"));  
  59.         EndPaint(hwnd, &ps);  
  60.         return 0;  
  61.     case WM_DESTROY:  
  62.         PostQuitMessage(0);  
  63.         return 0;  
  64.     }  
  65.     return DefWindowProc(hwnd, message, wParam, lParam);  
  66. }  

出现如下的问题:

[cpp]  view plain copy
  1. 1>------ 已启动生成: 项目: shang1, 配置: Debug Win32 ------  
  2. 1>正在编译...  
  3. 1>main.cpp  
  4. 1>d:\程序代码\shang1\main.cpp(22) : error C2440: “=”: 无法从“const char [7]”转换为“LPCWSTR”  
  5. 1>        与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换  
  6. 1>d:\程序代码\shang1\main.cpp(31) : error C2664: “CreateWindowExW”: 不能将参数 2 从“const char [7]”转换为“LPCWSTR”  
  7. 1>        与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换  
  8. 1>d:\程序代码\shang1\main.cpp(58) : error C2664: “TextOutW”: 不能将参数 4 从“const char [45]”转换为“LPCWSTR”  
  9. 1>        与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换  
  10. 1>生成日志保存在“file://d:\程序代码\shang1\Debug\BuildLog.htm”  
  11. 1>shang1 - 3 个错误,0 个警告  
  12. ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========  

出现问题的原因:UNICODE的问题

在项目属性中,【配置属性】-【常规】-【项目默认值】-【字符集】-

默认为【使用Unicode字符集】,改成【未设置】或【使用多字节字符集】,即可解决问题。

解决办法二是:

wndclass.lpszClassName =L "shang1";

或wndclass.lpszClassName =_T( "shang1");

你可能感兴趣的:(VS2008中Unicode的解决办法)