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不一样了!?希望得到详细解释?! 展开
#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不一样了!?希望得到详细解释?! 展开
3个回答
展开全部
在2005中报错是因为2005用的是UNICODE码,你将所有字符串由:"hello"改为:_T("hello")的格式就好了。
ANSI码宽字符与UNICODE宽字节之间的区别。一般在WINDOWS编程的书中可以查到相关内容。基础知道,不多说了。
ANSI码宽字符与UNICODE宽字节之间的区别。一般在WINDOWS编程的书中可以查到相关内容。基础知道,不多说了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
= =
已经回答了你的问题
http://zhidao.baidu.com/question/135991969.html
VC2005中缺省使用Unicode编码,API当然也是用Unicode的API
你用的ASCII字符串不能被Unicode API识别,也不符合C++语法(char*不能直接转换成TCHAR*)
已经回答了你的问题
http://zhidao.baidu.com/question/135991969.html
VC2005中缺省使用Unicode编码,API当然也是用Unicode的API
你用的ASCII字符串不能被Unicode API识别,也不符合C++语法(char*不能直接转换成TCHAR*)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给程序中的字符串添加_T()宏就可以解决。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询