一个简单的WINDOWS窗口在Visual Studio 2005下面编译出错. - C++ Builder / Windows SDK/API
偶刚学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 已跳过 ==========
[解决办法]
汗,vc的东西怎么放bcb了
[解决办法]
好像是因为你定义了UNICODE,到编译器里找找去掉这个预定义
或者把 "weixin2003 ", "哈哈 ",之类的全换成TEXT( "weixin2003 "),TEXT( "哈哈 ")...
strlen改成lstrlen
另外怎么不放到VC论坛里?
[解决办法]
手边没有vs2005,只有vs2003,用二种方法编译执行通过
1.命令行方式:
cl t.cpp user32.lib Gdi32.lib
2.编译环境:
建项目:新建VC++项目,选win32控制台项目,选应用程序设置为windows应用程序,将你的程序贴到它的#include "项目文件名.h "后面
编译,可执行
估计是 Waiting4you(毛毛) 所说字符集问题,我的vs2003这样设:
进项目属性-> 配制属性-> 常规-> 字符集-> 选:使用多字节字符集