代码如下:
首先在头文件中定义变量:
CString temp;
char* str;
以下是.CPP文件中的代码:
m_combo.InsertString(0,"第一项");
temp="第一项的值";
str=(LPSTR)(LPCTSTR)temp;
m_combo.SetItemDataPtr(0,str);m_combo.InsertString(1,"第二项");
temp="第二项的值";
str=(LPSTR)(LPCTSTR)temp;
m_combo.SetItemDataPtr(1,str);以下是取得选中的值:
char* p=(LPTSTR)m_combo.GetItemDataPtr(m_combo.GetCurSel());
我的问题是,我无论选项第一项,还是第二项,它的值都是一样的.按理来说,我如果选中第一项时,它的值应该是"第一项的值",如果我选中第二项,它的值应该是"第二项的值"才对,可我无论选哪项,它的值都是"第二项的值",为什么?

解决方案 »

  1.   

    呵呵,你两次设置都使用了同一个CString的指针,当然结果一样了。改成两个CString,分别设置。
      

  2.   

    SetItemDataPtr只是把str的指针放在Data里了,没有放置指针指向的内容,所以第二次你用另外的值给temp赋值,改变了指针指向的内容。
      

  3.   

    如果按照xiaoshi0(小鱼儿)的说法,如何Combo Box里面的项不固定时,那我又怎样确定要多少个CString 对象呢?
      

  4.   

    m_combo.InsertString(0,"第一项");              
    temp="第一项的值";  
    str = new TCHAR[temp.GetLength() + 1];
    lstrcpy(str, temp.GetBuffer()); 
    m_combo.SetItemDataPtr(0, str); m_combo.InsertString(1,"第二项");              
    temp="第二项的值";  
    str = new TCHAR[temp.GetLength() + 1];
    lstrcpy(str, temp.GetBuffer()); 
    m_combo.SetItemDataPtr(1, str); 
    大致上这样。
      

  5.   

    非常感谢,我实现了,不过还有个小问题还想请教一下,如何按照Mackz(在相互)的方法,一下就new了这么多个str,我要如何才能在程序退出时完全释放这些内存呢?我用delete [] str;好像不能完全释放内存呀?
      

  6.   

    应该和你的CComboBox配套一个CArray<CString, CString>这样的动态数组,每当CComboBox增加一个,数组也相应的增加一个,然后将增加完的Index添加到ItemData里,这样下次你通过GetItemData获得数组的index,然后调用GetAt从数组中读出你要的字符串就可以了。