个简单的WINDOWS窗口在Visual Studio 2005下面编译出错
偶刚学VC++
写了个简单的WINDOWS窗口在Visual Studio 2005下面编译出错.
在VC++6.0下面编译成功
请问怎样修改才能编译通过呢?
程序如下:
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
int WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName= "weixin2003 ";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW ¦ CS_VREDRAW;
RegisterClass(&wndcls);
HWND hwnd;
hwnd=CreateWindow( "weixin2003 ", "刘永 ",WS_OVERLAPPEDWINDOW ,
0,0,600,400,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar, "char is %d ",wParam);
MessageBox(hwnd,szChar, "weixin ",MB_OK);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd, "mouse clicked ", "weixin ",MB_OK);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50, "第一个Windows应用程序 ",strlen( "第一个Windows应用程序 "));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0, "哈哈 ",strlen( "哈哈 "));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd, "是否真的结束? ", "关闭 ",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
错误信息:
------ 已启动生成: 项目: WinMain, 配置: Debug Win32 ------
正在编译...
WinMain.cpp
d:\c++\c++练习目录\winmain\winmain\winmain.cpp(15) : warning C4007: “WinMain”: 必须是“__stdcall”
d:\c++\c++练习目录\winmain\winmain\winmain.cpp(24) : error C2440: “=”: 无法从“const char [11]”转换为“LPCWSTR”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
d:\c++\c++练习目录\winmain\winmain\winmain.cpp(31) : error C2664: “CreateWindowExW”: 不能将参数 2 从“const char [11]”转换为“LPCWSTR”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
d:\c++\c++练习目录\winmain\winmain\winmain.cpp(56) : error C2664: “MessageBoxW”: 不能将参数 2 从“char [20]”转换为“LPCWSTR”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
d:\c++\c++练习目录\winmain\winmain\winmain.cpp(59) : error C2664: “MessageBoxW”: 不能将参数 2 从“const char [14]”转换为“LPCWSTR”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
d:\c++\c++练习目录\winmain\winmain\winmain.cpp(62) : error C2664: “TextOutW”: 不能将参数 4 从“const char [22]”转换为“LPCWSTR”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
d:\c++\c++练习目录\winmain\winmain\winmain.cpp(69) : error C2664: “TextOutW”: 不能将参数 4 从“const char [5]”转换为“LPCWSTR”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
d:\c++\c++练习目录\winmain\winmain\winmain.cpp(73) : error C2664: “MessageBoxW”: 不能将参数 2 从“const char [14]”转换为“LPCWSTR”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
生成日志保存在“file://d:\c++\c++练习目录\WinMain\WinMain\Debug\BuildLog.htm”
WinMain - 7 个错误,1 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
[解决办法]
项目-〉属性-〉配置属性-〉常规-〉字符集,不要选Unicode
[解决办法]
如果使用 Unicode 字符集,
那么字符串表示方式、操作方法都需要更改 ~
改用 ANSI 编码即可 ~
[解决办法]
反对楼上三位教坏人.
支持用unicode 编程.
[解决办法]
因为默认是UNICODE,最好加上_T
[解决办法]
hwnd=CreateWindow( "weixin2003 ", "刘永 ",WS_OVERLAPPEDWINDOW ,
"weixin2003 ",像这样的字符串都改为TEXT( "weixin2003 ")