首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

一个简单的WINDOWS窗口在Visual Studio 2005下面编译出错.解决方案

2012-02-15 
一个简单的WINDOWS窗口在Visual Studio 2005下面编译出错. - C++ Builder / Windows SDK/API偶刚学VC++写

一个简单的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这样设:
进项目属性-> 配制属性-> 常规-> 字符集-> 选:使用多字节字符集


热点排行