程序需要向ComboBox添加新项,但是添加的这个新项需要显示在已有项的第一个!
但已有程序已对其他项的操作做好规定,就是按初始添加项的时候进行了规定,此时添加新项实际改变了以前项的排序,导致重新选择的时候,选择项的时候不能按以前的值去操作,怎么才能不修改项的排位而让新项显示在其他项的前面呢?

解决方案 »

  1.   

    举个例子,不知能不能满足你的要求。
    初始化:
        m_ComboCtrl.ResetContent();
        m_ComboCtrl.AddString("string 1");
        m_ComboCtrl.AddString("string 2");
        m_ComboCtrl.AddString("string 3");
    添加一个选项在首行:
        m_ComboCtrl.InsertString(0,"string 0");
    设置对应的值:
        m_ComboCtrl.SetItemData(0,3);
        m_ComboCtrl.SetItemData(1,0);
        m_ComboCtrl.SetItemData(2,1);
        m_ComboCtrl.SetItemData(3,2);
    取出对应原来排序的值:
    OnSelchangeCombo() 
    {
        m_Combo=m_ComboCtrl.GetItemData(m_ComboCtrl.GetCurSel());
    }m_Combo的值就是原来排好的顺序,按照它进行原来的操作就可以了。
      

  2.   


    使用SetItemData对项目进行数据关联,这样可以不用担心项目顺序的变化。
      

  3.   

    用排序的方法比较麻烦,最好是用InsertString插入新项,修改已有程序,根据字符串或者ItemData来区分各项。
      

  4.   

    CComboBox::SetItemDataint SetItemData( int nIndex, DWORD dwItemData );返回值:出错时返回CB_ERR。参数: nIndex 指定待设置的项的下标。  
    dwItemData 指定待设置的项的新值。  说明:
    给组合框中某个项设置一个32位的值。如果是一个指针,则可以用SetItemDataPtr函数进行设置。
    这样你可以传进去一个结构体指针.可以保存你关于nindex索引值对应项的任何信息.都是你自定义的.取的时候调用CComboBox::GetItemData取结构体里的内容就可以了.
      

  5.   

    SetItemData
    GetItemData
    利用上述函数,使你实际用的索引保存在ItemData中,添加新项目时,在顶部插入,但ItemData指定是尾部的(最大的+1),对项目进行数据关联,在用到取值的时候,通过当前选中项目的索引提取其ItemData就是你要使用的值。