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"中,英文字符占一个字节,汉字占两个字节

原文地址:https://www.cnblogs.com/shenshuyang/p/2977236.html