学习MFC过程中的纪要

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会出现红色下划线,但是不影响正常编译

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值