下面是创建windows窗口的应用程序实例:代码是照着书上敲的,但是编译遇到了错误:
错误1:cannot convert from 'char [5]' to 'LPCWSTR'
错误2:cannot convert parameter 2 from 'char [5]' to 'LPCWSTR'希望哪位大哥指导小弟一把,我是初学windows编程,有一定的C/C++基础的,昨天刚上完第二节课,回来敲实验就遇到这个问题了!
开发环境是VS2010,建的是win32 Application
#include "stdafx.h"
#include<Windows.h> //嵌入基本的windows功能
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //窗口函数说明//初始化窗口类
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd; //主窗口句柄
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[]="窗口"; //窗口类名
char lpszTitle[]="My_Windows"; //窗口标题名 //窗口类的定义
wndclass.style=0; //窗口类型为缺省类型
wndclass.lpfnWndProc=WndProc; //定义窗口处理函数
wndclass.cbClsExtra=0; //窗口类无扩展
wndclass.cbWndExtra=0; //窗口实例无扩展
wndclass.hInstance=hInstance; //当前实例句柄
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化图标为缺省图标
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); //窗口采用箭头光标
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景为白色
wndclass.lpszMenuName=NULL; //窗口中无菜单
wndclass.lpszClassName=lpszClassName; //窗口类名为窗口 ------》错误1:cannot convert from 'char [5]' to 'LPCWSTR' if(!RegisterClass( &wndclass )) //注册失败则发出警告
{
MessageBeep(0);
return FALSE;
} hwnd=CreateWindow
(
lpszClassName, //窗口类名
lpszTitle, //窗口实例的标题名
WS_OVERLAPPEDWINDOW, //创建一带边框、标题栏、系统菜单及最大化、最小化、关闭按钮的窗口
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口的高和宽为缺省值
NULL, //窗口无父窗口
NULL, //窗口无主菜单
hInstance, //创建此窗口的应用程序的当前句柄
NULL //不使用该值
); //---->>错误2:cannot convert parameter 2 from 'char [5]' to 'LPCWSTR' ShowWindow(hwnd,nCmdShow); //显示主窗口 UpdateWindow(hwnd); //绘制用户区 while( GetMessage(&Msg,NULL,0,0)) //消息循环
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam; //消息循环结束即程序终止时将信息返回系统
} //WinMain()结束//窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
default: //缺省时采用系统消息缺省处理函数
return DefWindowProc(hwnd,message,wParam,lParam);
}
return(0);
}
错误1:cannot convert from 'char [5]' to 'LPCWSTR'
错误2:cannot convert parameter 2 from 'char [5]' to 'LPCWSTR'希望哪位大哥指导小弟一把,我是初学windows编程,有一定的C/C++基础的,昨天刚上完第二节课,回来敲实验就遇到这个问题了!
开发环境是VS2010,建的是win32 Application
#include "stdafx.h"
#include<Windows.h> //嵌入基本的windows功能
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //窗口函数说明//初始化窗口类
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd; //主窗口句柄
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[]="窗口"; //窗口类名
char lpszTitle[]="My_Windows"; //窗口标题名 //窗口类的定义
wndclass.style=0; //窗口类型为缺省类型
wndclass.lpfnWndProc=WndProc; //定义窗口处理函数
wndclass.cbClsExtra=0; //窗口类无扩展
wndclass.cbWndExtra=0; //窗口实例无扩展
wndclass.hInstance=hInstance; //当前实例句柄
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化图标为缺省图标
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); //窗口采用箭头光标
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景为白色
wndclass.lpszMenuName=NULL; //窗口中无菜单
wndclass.lpszClassName=lpszClassName; //窗口类名为窗口 ------》错误1:cannot convert from 'char [5]' to 'LPCWSTR' if(!RegisterClass( &wndclass )) //注册失败则发出警告
{
MessageBeep(0);
return FALSE;
} hwnd=CreateWindow
(
lpszClassName, //窗口类名
lpszTitle, //窗口实例的标题名
WS_OVERLAPPEDWINDOW, //创建一带边框、标题栏、系统菜单及最大化、最小化、关闭按钮的窗口
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口的高和宽为缺省值
NULL, //窗口无父窗口
NULL, //窗口无主菜单
hInstance, //创建此窗口的应用程序的当前句柄
NULL //不使用该值
); //---->>错误2:cannot convert parameter 2 from 'char [5]' to 'LPCWSTR' ShowWindow(hwnd,nCmdShow); //显示主窗口 UpdateWindow(hwnd); //绘制用户区 while( GetMessage(&Msg,NULL,0,0)) //消息循环
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam; //消息循环结束即程序终止时将信息返回系统
} //WinMain()结束//窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
default: //缺省时采用系统消息缺省处理函数
return DefWindowProc(hwnd,message,wParam,lParam);
}
return(0);
}
解决方案 »
- 现在应用VC++6.0作为开发工具的地方多吗?
- 如何点击Clean Data按钮,就能清空Edit Control里的数据?【在线等】
- 请问,如何在IE上添加一个控制栏呢?就像它底下的状态栏一样。
- ■■寻找VC++程序高手,有小项目合作,是高手的请进■■
- 高分求助:怎样使CListView和CListCtrl的某一行文字用粗体字显示?在线等待,解决及给分!
- 关于 ODBC 数据源 ? 在线 急等!!!!
- 关于vc的一个问题,急!!!!!
- 如何向项目中添加.lib库文件连接
- 麦田新文学招募责编、网编
- 关于C++ 游戏引擎 导出 android 或ios
- 寻人:指纹识别
- 关于深入迁出MFC第三章仿真AFX_CLASSINIT结构的问题
默认的是“使用 Unicode 字符集”而你却用
char lpszClassName[]="窗口"; //窗口类名
char lpszTitle[]="My_Windows"; //窗口标题名
hwnd=CreateWindow
(
lpszClassName, //窗口类名
lpszTitle, //窗口实例的标题名
这些都是“使用多字节字符集”下使用的函数和参数
TCHAR lpszTitle[]="My_Windows"; //窗口标题名
char lpszTitle[]="My_Windows"; //窗口标题名
================
将char改成TCHAR就行了。
改成
TCHAR lpszClassName[]=__TEXT("窗口");就行了楼主查一下Unicode和ASCII就知道原因了
1、VS2010默认字符集UNICODE不变:
char lpszClassName[]="窗口"; --》改成TCHAR lpszClassName[]=_TEXT("窗口");
或者 char lpszClassName[]="窗口"; --》改成TCHAR lpszClassName[]=_T("窗口");
或者 char lpszClassName[]="窗口"; --》改成WCHAR lpszClassName[]=L"窗口";2、VS2010默认字符集改为多字节字符集:项目->属性->配置属性->常规->字符集:使用多字节字符集
char lpszClassName[]="窗口"; --》不变
测试可以通过!~谢谢各位~