VC2005用API编写基本的窗口错误

#include<windows.h>#include<stdio.h>LRESULTCALLBACKWinSunproc(HWNDhwnd,UINTuMsg,WPARA... #include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WinSunproc
(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
int WINAPI WinMain
(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
)
{
WNDCLASS wndclass;

wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor (NULL,IDC_CROSS);
wndclass.hIcon=LoadIcon (NULL,IDI_ERROR);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WinSunproc;
wndclass.lpszClassName="LiJingYi";
wndclass.lpszMenuName=NULL;

wndclass.style=CS_HREDRAW | CS_VREDRAW ;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
RegisterClass(&wndclass);
HWND hwnd;
hwnd=CreateWindow("LiJingYi","学习",WS_OVERLAPPEDWINDOW ,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);

ShowWindow(hwnd,SW_SHOWDEFAULT);
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
)
{
HDC hdc;
PAINTSTRUCT ps;
switch (uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf (szChar,"char is %d" ,wParam);
MessageBox(hwnd,szChar,"LiJingYi",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","LiJingYi",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut (hdc,0 ,59,"hello world!",strlen("hello world!"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
TextOut (hdc,0,0,"学习",strlen("学习"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"你真的要走吗?","LiJingYi",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default :
return DefWindowProc(hwnd,uMsg,wParam,lParam);

}
return 0;
}
再C++6.0就能通过,单是2005不行,错误是 一些类似于:g:\c++教程\winmian\winmian\winmain.cpp(79) : error C2664: “MessageBoxW”: 不能将参数 2 从“const char [15]”转换为“LPCWSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换的错误。。这是怎么回事啊?
是不是2005的某些规则和6.0不一样了!?希望得到详细解释?!
展开
 我来答
小小好宝贝
2010-02-02 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:117
采纳率:100%
帮助的人:74万
展开全部
在2005中报错是因为2005用的是UNICODE码,你将所有字符串由:"hello"改为:_T("hello")的格式就好了。
ANSI码宽字符与UNICODE宽字节之间的区别。一般在WINDOWS编程的书中可以查到相关内容。基础知道,不多说了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2010-02-01 · TA获得超过1257个赞
知道小有建树答主
回答量:1748
采纳率:0%
帮助的人:1207万
展开全部
= =
已经回答了你的问题
http://zhidao.baidu.com/question/135991969.html

VC2005中缺省使用Unicode编码,API当然也是用Unicode的API

你用的ASCII字符串不能被Unicode API识别,也不符合C++语法(char*不能直接转换成TCHAR*)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夺魂狼剑
2010-02-02 · TA获得超过1273个赞
知道小有建树答主
回答量:796
采纳率:0%
帮助的人:799万
展开全部
给程序中的字符串添加_T()宏就可以解决。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式