我做了一个Dialog,里面有一个Edit控件,和一个Combox控件,当我在Edit控件里输入一个名字,单击保存时可以把这个名字加到Combox里,但是当我下次运行程序的时候,还想保存的名字能在Combox里面,我遇到了以下问题
  要是想下次运行程序的时候这些保存的名字还会出现在Combox里,必须把这些名字保存到一个文件中如name.ini,假设我保存了三个名字,我保存的形式是这样的
[Name]
name1=我
name2=你
name3=他
问题1:我觉得我的保存的形式不好,可不可以直接保存为名字省去前面的东西:如下
[Name]



问题2:如果知道三个名字,我读取的时候,直接读取变量名然后AddString()即可,但是我不知道保存有几个文件名字,读的时候怎么能确保把[Name]所有的名字都读到呢?
问题3:如果在Edit里输入重名时怎么提醒他?因为名字都保存在文件里,我怎么判断是不是重名呢?

解决方案 »

  1.   

    问题1
    只保存名字的形式不是合法的INI文件格式问题2
    首先在你原来的基础上有个实现简单的方法,你可以保存当前文件中的名字数目
    读取时先读取Count字段,然后用for循环读取后面的名字[Name]
    Count=3
    name1=A
    name2=B
    name3=C当然也有不需要增加Count字段的方法,就是用GetPrivateProfileSection来读取整个Section,这个需要自己解析每个值。问题3
    你的程序运行之后,你已经将文件名都读入CComboBox中了,你直接判断CComboBox中是否由重复不就行了
      

  2.   

    给段代码给你
    void CxxDlg::Load()
    {
    LPCTSTR szIniFile = _T("C:\\abc.ini"); int nCount;
    nCount = GetPrivateProfileInt(_T("Name"), _T("Count"), 0, szIniFile); CString szKey;
    TCHAR szValue[256];
    for(int i = 0; i < nCount; i++)
    {
    szKey.Format(_T("name%d"), i);
    GetPrivateProfileString(_T("Name"), szKey, _T(""), szValue, sizeof(szValue), szIniFile); m_cbComboBox.AddString(szValue);
    }
    }void CxxDlg::Save()
    {
    LPCTSTR szIniFile = _T("C:\\abc.ini");
    CString szKey;
    TCHAR szValue[256];

    int nCount = m_cbComboBox.GetCount();
    _stprintf(szValue, _T("%d"), nCount);

    WritePrivateProfileString(_T("Name"), _T("Count"), szValue, szIniFile);

    for(int i = 0; i < nCount; i++)
    {
    szKey.Format(_T("name%d"), i);
    m_cbComboBox.GetLBText(i, szValue); WritePrivateProfileString(_T("Name"), szKey, szValue, szIniFile);
    }
    }