1.字符串转换
转数值型
//转int
CString str("123");
int iTemp=atoi(str);
//转float
CString str("123.456");
float fTemp=atof(str);
转char类型
//函数转换
char *p;
CString str("abc");
p=str.GetBuffer(str.GetLength());
//用memcpy转换
CString str("abcd");
char mch[20];
memcpy(mch,str,str.GetLength());
//用LPCTSTR强制转换
char *ch;
CString str("Good Morning!");
ch=(LPSTR)(LPCTSTR)str;
char与wchar_t之间的转换
- wchar_t转char
char * wchar2char(const wchar_t* wchar )
{
char * m_char;
int len= WideCharToMultiByte( CP_ACP ,0,wchar ,wcslen( wchar ), NULL,0, NULL ,NULL );
m_char= new char[len+1];
WideCharToMultiByte( CP_ACP ,0,wp ,wcslen( wchar ),m_char,len, NULL ,NULL );
m_char[len]= '\0';
return m_char;
}
- char转wchar_t
wchar_t * char2wchar(const char* cchar)
{
wchar_t *m_wchar;
int len = MultiByteToWideChar( CP_ACP ,0,cchar ,strlen( cchar), NULL,0);
m_wchar= new wchar_t[len+1];
MultiByteToWideChar( CP_ACP ,0,cchar,strlen( cchar),m_wchar,len);
m_wchar[len]= '\0' ;
return m_wchar;
}
自定义方法转换
char* CExample009ArraySortDlg::CString2Char(CString str) {
//注意:以下n和len的值大小不同,n是按字符计算的,len是按字节计算的
int n = str.GetLength();
//获取宽字节字符的大小,大小是按字节计算的
int len = WideCharToMultiByte(CP_ACP, 0, str, str.GetLength(), NULL, 0, NULL, NULL);
//为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小
char* cStr = new char[len + 1]; //以字节为单位
//宽字节编码转换成多字节编码
WideCharToMultiByte(CP_ACP, 0, str, str.GetLength(), cStr, len, NULL, NULL);
return cStr;
}
2.CPtrList的使用
任何类型往里怼,取参数的时候强制类型转换
//插入操作
CAccount* m_pAccount = new CAccount();//创建一个对象
m_pAccount->m_name = m_strName;//对象赋值
m_pAccount->m_count = m_dCost;
m_acccountList.AddTail(m_pAccount);//在尾部插入
//取值操作
POSITION pos = m_acccountList.GetHeadPosition(); //去除表头的位置
/*取出某位置的元素并强制类型装换,再给pos赋值*/
CAccount * m_pAccount = (CAccount*)m_acccountList.GetNext(pos);
3.Static Text、Picture Control无法添加变量的问题
Static Text、Picture Control需要手动添加变量
不能使用默认的ID(IDC_STATIC),需要修改后手动绑定变量DDX_Control(pDX, IDC_STATICPRICE,m_ctlframe);
在VS2017中使用ID会出现红色下划线,但是不影响正常编译