当前位置: 代码迷 >> VC >> 刚刚试着用VS2008,出现了一些有关问题,请问下高手
  详细解决方案

刚刚试着用VS2008,出现了一些有关问题,请问下高手

热度:8389   发布时间:2013-02-25 00:00:00.0
刚刚试着用VS2008,出现了一些问题,请教下高手
一下是代码


#include"afxwin.h"
class MyWindow:public CFrameWnd
{
public:
MyWindow()
{
Create(NULL,"My Application Window");
MessageBox("Window Created","CFrameWnd Constructor");
}
};
class MyApp:public CWindApp
{
public:
BOOL InitInstance()
{
MyWindow *MywindowObject=new MyWindow();
m_pMainWnd=MywindowObject;
MywindowObject->ShowWindow(SW_SHOWNORML);
return TRUE;
}
};
MyApp MyAppObject;

以下是错误,青各位高手帮忙解答下谢谢

1>正在编译...
1>sampleapplication.cpp
1> WINVER not defined. Defaulting to 0x0600 (Windows Vista)
1>c:\documents and settings\administrator\my documents\visual studio 2008\projects\sampleapplication\sampleapplication.cpp(7) : error C2664: “CFrameWnd::Create”: 不能将参数 2 从“const char [22]”转换为“LPCTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>c:\documents and settings\administrator\my documents\visual studio 2008\projects\sampleapplication\sampleapplication.cpp(8) : error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [15]”转换为“LPCTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>c:\documents and settings\administrator\my documents\visual studio 2008\projects\sampleapplication\sampleapplication.cpp(12) : error C2504: “CWindApp”: 未定义基类
1>c:\documents and settings\administrator\my documents\visual studio 2008\projects\sampleapplication\sampleapplication.cpp(17) : error C2065: “m_pMainWnd”: 未声明的标识符
1>c:\documents and settings\administrator\my documents\visual studio 2008\projects\sampleapplication\sampleapplication.cpp(18) : error C2065: “SW_SHOWNORML”: 未声明的标识符
1>生成日志保存在“file://c:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\sampleapplication\Debug\BuildLog.htm”
1>sampleapplication - 5 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

------解决方案--------------------------------------------------------
把所有的字符串都换成以下的形式就OK了
_T("My Application Window")
------解决方案--------------------------------------------------------
VC 中与字符串相关的宏 _T、TEXT,_TEXT、L 的作用:

一、 在字符串前加一个L作用: 
如 L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。
strlen("asd") = 3; 
strlen(L"asd") = 6;

二、 _T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式
如果你定义了UNICODE,那么_T宏会把字符串前面加一个L。这时 _T("ABCD") 相当于 L"ABCD" ,这是宽字符串。 
如果没有定义,那么_T宏不会在字符串前面加那个L,_T("ABCD") 就等价于 "ABCD"

三、TEXT,_TEXT 和_T 一样的

如下面三语句: 
TCHAR szStr1[] = TEXT("str1"); 
char szStr2[] = "str2"; 
WCHAR szStr3[] = L("str3"); 
那么第一句话在定义了UNICODE时会解释为第三句话,没有定义时就等于第二句话。
但二句话无论是否定义了UNICODE都是生成一个ANSI字符串,而第三句话总是生成UNICODE字符串。 
为了程序的可移植性,建议都用第一种表示方法。 
但在某些情况下,某个字符必须为ANSI或UNICODE,那就用后两种方法。
 
  相关解决方案