VC++学习/MFC (1)
博客也落下好长时间了,之前有过c++学习和java学习的几篇,偶尔拿出来翻翻,对自己还蛮有帮助,上学期买了本孙鑫老师的《VC++深入详解》,看了4个单元然后就放寒假了,可能寒假期间一点都没有想到学习(惭愧),加上当时学的不深入,现在看起这本书居然感觉和没看过差不多!鉴于这样,我就打算重新认真的把这本书好好看一下,平时遇到什么问题我会在博客中写下,也方便我以后自己温故而知新。
前面两个但愿重要讲了Windows程序内部运行机制,以及对C++的复习,书上是以vc6.0为平台的,我今天下载了一个visual studio2010,感觉还不错,然后就自己实践了一下书本上讲的 创建按钮。
首先了解了父窗口和视窗口的概念,就会知道,CButton实在VIEW中创建的。
然后在VIEW中添加一个类向导,VC6.0中是Add member variable...选择WM_CREATE,然后编辑
在编辑过程中,我遇到了问题,在完成这段代码后在CV6.0中是正确的,在studio2010中会显示
错误 1 error C2664: “CButton::Create”: 不能将参数 1 从“const char [9]”转换为“LPCTSTR” c:\users\administrator\desktop\test\test\test\testview.cpp 138 1 TEST
int CTESTView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 btn.Create("sdfwsfsd",WS_CHILD | BS_PUSHBUTTON, CRect(0,0,100,100),this,123); btn.ShowWindow(SW_SHOWNORMAL); return 0; }
上网查看后才发现,create函数第一个参数须为长指针,必须将“sdfwsfsd”改成_T("sdfwsfsd")才行,于是编译通过。
关于_T():转载(http://hi.baidu.com/liuhuishan/blog/item/72dc921c90d54d8e87d6b687.html)
1\C++语言中“_T”是什么意思?
Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。
如果将来你不打算升级到unicode,那么也不需要_T,
---------------------------------------------------------
_t("hello world")
在ansi的环境下,它是ansi的,如果在unicode下,那么它将自动解释为双字节字符串,既unicode编码。
这样做的好处,不管是ansi环境,还是unicode环境,都适用。
2\请问在vc++中的字符串_T("ABC")和一个普通的字符串“ABC”有什么区别。
_T("ABC")
表示如果定义了unicode
它表示 L"ABC",每个字符为16位,宽字符字符串
---------------------------------------------------------
if not UNICODE
它就是ascii的"ABC",每个字符为8位
"ABC"就是指ascii字符串"ABC"
----------------------------------------------------------
相当于
#ifdef _UNICODE
#define _T("ABC") L"ABC"
#else
#define _T("ABC") "ABC"
#endif
----------------------------------------------------------
_T("ABC")中的一个字符和汉字一样,占两个字节,而在"ABC"中,英文字符占一个字节,汉字占两个字节