下面是MSDN上CreateWindows的原型:
HWND CreateWindow( LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam
);
你的调用中,除了前两个参数,后面的参数均没有问题。
前两个参数类型是LPCTSTR即const的LPTSTR,MSDN中的定义是
#ifdef UNICODE
typedef LPWSTR LPTSTR;
#else
typedef LPSTR LPTSTR;
#endif
而LPWSTR和LPSTR分别是:
typedef WCHAR *LPWSTR;
typedef CHAR *LPSTR;
所以说,根据你是按UNICODE方式编译程序还是按ANSI方式编译程序,这两个参数代表不同类型的字符串,你的代码说参数类型不符,这说明编译器试图按UNICODE方式编译程序,但是你传入了普通的ANSI字符串。解决办法是写一段自动识别字符串类型的代码:
#include <tchar.h> //用于自动识别字符串类型
TCHAR lpClassName[] = TEXT("窗口");
hwnd = CreateWindow(lpClassName,TEXT("windows"),
WS_MAXIMIZEBOX,10,10,300,400,NULL,NULL,hInstance,NULL);
如果有不清楚的地方可以HI我
追问咋个知道它按哪种编码方式呢??我用的是 Visual Studio 2010。。。。
我用了你的方式,可以编译和连接,但是运行时有内存错误,该内存不能read。。。
为什么会有两种编码呢??我们学C/C++时都没有区分这个,用到字符 串时直接用char [ ];
LPCTSTR lpClassName中LPCTSTR是什么类型哦???可以先把字符串改成LPCTSTR类型么??
追答现在ANSI字符串快要被淘汰了,为了国际化目的基本都是用UNICODE编码来写程序了,我的VS2008查看编码的地方在这,2010应该差不多: