zoukankan      html  css  js  c++  java
  • 【改错】总结一下近几天犯的错误

    最近写点东西,发现果断还是把老师教的都还回去了.......额,但是在我敲键盘的过程中,又汲取回来啦。

    总结一下最近犯的错误吧,给自己提个醒,希望不要再犯了~

    1.用控件变量获取输入的文本,出错。

    代码:CString  str;

       m_edEdit.GetWindowText(str);

       ......

    因为函数挺长,所以好一会都没发现问题在哪里。后来利用“注释法”(个人觉得好实用的方法~~),找到了问题:m_edEdit.GetWindowText(str);

    错误原因在于,window不止一个,所以编译链接是没有问题的,但是运行获取文本时,就会出现错误!

    修改:GetDlgItem(IDC_XXX)->GetWindowText(str);  首先根据ID得到控件,获取该控件上的文本。这样就不会出错啦!

    这个问题的本质原因是没有将变量与控件关联,这个有可能是编码者自定义的控件变量,例如:CEdit m_edEdit; 然后直接开始使用。

    所以也可以在void CCLayerDlg::DoDataExchange(CDataExchange* pDX)中添加:DDX_Control(pDX, IDC_XXX, m_edEdit);

    2.字符间的转换

    这个应该检讨一下,之前只觉得是小细节,没有太多的注意。真正使用的时候才发现原来里面蛮有学问的,所以特意搜了一些资料,总结的挺详细的。我以身试法的说说看,希望能够尽量通俗。

    (1)将wstring转换为CString

    源代码:

    void CXXXView::OnCurName()
    {
     // TODO: 在此添加命令处理程序代码

     CXXXDoc* pDoc = GetDocument();

     std::wstring wstrName;
     wstrName= pDoc->m_ap->GetName();

     CString str;
     str.Format(_T("名称:%s"),wstrName.c_str());//利用c_str()函数进行转换

     AfxMessageBox(str);

    }

    (2)_T的关键性作用

     UINT CurID;
     CurID = pDoc->m_ap->GetID();

     CString str;
     str.Format(_T("ID号是:%u"),CurID);//此处如果不加_T就会出错
     AfxMessageBox(str);

    查看项目的属性会发现:

    Uincode字符集进行解码时,_T必须加上。如果是其他,则_T可有可无。(此处关于_T宏会再学习,再解释)

    (3)将CString转换为wstring

    m_wtrName = str.AllocSysString(); //同样也是利用函数来实现

    关于字符间的转换,在网上找到了一篇挺详细的文章。随后会转载~~

  • 相关阅读:
    java9
    java8
    java7
    JavaScript将字符串拆分为数组
    JavaScript return false
    Java中前台往后台传多个id参数
    Easyui清除tree的选中
    jquery easyui tree的全选与反选
    android源码开发基础知识了解
    Android activity的生命周期
  • 原文地址:https://www.cnblogs.com/xxt1991/p/2419990.html
Copyright © 2011-2022 走看看