一、字符串及数据类型
字符类型比较:
- CString:动态的TCHAR数组,封装的类;
- LPCTSTR:常量的TCHAR指针,定义为typedef const TCHAR* LPCTSTR,其中C是const,P是指针,T指_T宏
- LPTSTR:TCHAR指针,定义为typedef TCHAR* LPTSTR
- TCHAR:宏,wchar_t(Unitcode)或char
- WCHAR:宏,wchar_t
- wchar_t:unicode编码数据类型
- char:ASCII编码字符
- string:C++的字符串变量,包含头文件 #include <string>,常用方法有:
- a) =,assign() //赋以新值
b) swap() //交换两个字符串的内容
c) +=,append(),push_back() //在尾部添加字符
d) insert() //插入字符
e) erase() //删除字符
f) clear() //删除全部字符
g) replace() //替换字符
h) + //串联字符串
i) ==,!=,<,<=,>,>=,compare() //比较字符串
j) size(),length() //返回字符数量
k) max_size() //返回字符的可能最大个数
l) empty() //判断字符串是否为空
m) capacity() //返回重新分配之前的字符容量
n) reserve() //保留一定量内存以容纳一定数量的字符
o) [ ], at() //存取单一字符
p) >>,getline() //从stream读取某值
q) << //将谋值写入stream
r) copy() //将某值赋值为一个C_string
s) c_str() //将内容以C_string返回
t) data() //将内容以字符数组形式返回
u) substr() //返回某个子字符串
v) 查找函数
w) begin() end() //提供类似STL的迭代器支持
x) rbegin() rend() //逆向迭代器
y) get_allocator() //返回配置器
CString转TCHAR*
1.强制类型转换
CString theString( "This is a test" );
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;
2.cpy
CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);
3.GetBuffer
CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// 在这里添加使用p的代码
if(p != NULL) *p = _T('\0');
s.ReleaseBuffer();
CString和char*转换
1.使用wcstombs()
CString str("string");
char pChar[100];
wcstombs(pChar,str,100);
2.使用wcstombs_s()
TCHAR* 转CString
TCHAR szTchar[18] = L"TCHAR";
CString str;
str.Format(_T("%s"),szTchar);
CString与LPCTSTR等价:
CString str("cstring");
LPCTSTR pcStr = str;
WCHAR*(wchar_t*)的转化
1.使用wcscpy()
CString str("string");
WCHAR pWchar[100];
wcscpy(pWchar,str);
2.使用wcspy_s,上一个函数的安全版本
CString str("string");
WCHAR pWchar[100];
wcscpy(pWchar,100,str);
3.使用_tcspy()
CString str("string");
WCHAR pStr[100];
_tcscpy(pStr,str);
4.使用_tcspy_s
CString str("string");
WCHAR pStr[100];
_tcscpy_s(pStr,100,str);
strcpy处理ANSI编码
wcscpy处理Unicode
_tcspy()是一个宏
wcstombs()为了实现多字节和单字节转换而设计的
CString转int
<span style="font-size:12px;">CString str = _T("123");
int i = _ttoi(str);</span>
int转CString
int i = 123;
CString str ;
str.Format(_T("%d"), i);
DWORD与int区别
DWORD双字无符号
int长度与机器相关
int i=10; DWORD d=DWORD(i);
其它:
字符串_s函数
如:strcpy_s,它与strcpy基本一致,但会自动进行越界检查(以\0判断结束)。
char* 转 std::string
const char *s="hello"; //*s要是正确的字符串
std::string str(s);
char* data = ...;
int size = ...;
std::string myString(data,size); //已知长度,不要使用strlen
std::string 转 char*
std::string my_string("testing!");
const char* data = my_string.c_str(); //不能再改变my_string
std::string my_string("testing!");
char *cstr = new char[my_string.length() + 1];
strcpy(cstr,my_string.c_str());
//do stuff
delete[] cstr;
二、消息
- SC_CLOSE 关闭
- SC_MAXIMIZE 最大化
- SC_MINIMIZE
三、指针
1.定义函数时,变量是控件的,要使用指针;函数体里调用控件的成员函数,要使用->。传递参数,要取地址&。
//取combobox的值
CString CSerialTestDlg::GetComboboxValue(CComboBox* cob){
CString result(_T(""));
int curSel;
curSel=cob->GetCurSel();
if(curSel>-1){
cob->GetLBText(curSel,result);
return result;
}
return _T("");
}
void* 可强制转换为任何其它类型的指针。