MFC 琐碎知识点

一、字符串及数据类型

字符类型比较:

  • 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* 可强制转换为任何其它类型的指针。

你可能感兴趣的:(C++,c,unicode,String,CString)