Combo  box为Drop  list类型    我要在Combo  box中选中一项  与已知的一个字符串S匹配  把字符串S中与COMBO  BOX相同的部分显示在一个LIST  CTROL中  
       请给出原代码!  在线等!

解决方案 »

  1.   

    以COMBO中选中的 开头的一些字符
      

  2.   

    以COMBO中选中的 开头的一些字符
    -------------------------------
    可以详细一些么
    举个例子
    有点不清楚
    是以COMBO中选中的字符串作为S的开头么
      

  3.   

    假如COMBO里面是Stastics
      而字符串里面是
    GkStatus: Version(1.0) Ext()
    Toolkit: Version(1.0) Ext(basic)
    Startup: Wed, 14 Apr 2004 17:37:10 +0800   Running: 0 days 00:00:27
    ;
    -- Endpoint Statistics --
    Total Endpoints: 2  Terminals: 1  Gateways: 1  NATed: 0
    Cached Endpoints: 0  Terminals: 0  Gateways: 0
    -- Call Statistics --
    Current Calls: 0 Active: 0 From Neighbor: 0 From Parent: 0
    Total Calls: 0  Successful: 0  From Neighbor: 0  From Parent: 0
    Startup: Wed, 14 Apr 2004 17:37:10 +0800   Running: 0 days 00:00:32
    ;
    我要把关于Stasitcs的信息 显示到LISTCTRO上(上面的信息存在一个缓冲区里,而且信息是不断增加的)
      

  4.   

    你需要维护一个键值对在头文件中:
    #include<map>
    using namespace std;map<CString,CString> msgMap;在你的程序初始化函数里或其它地方进行初始化:msgMap["Stastics"]="你不断增长的信息串"; //可以不断赋值在你的COMBO选择事件里:
    CString strkey;
    m_cmb.GetLBText(m_cmb.GetCurSel(),strkey); //m_cmb是COMBO控件变量
    m_list.AddString(msgMap[strkey]); //m_list是LIST控件变量---------------------------
    不知道我理解清楚你的意思了没有.
    你应该用的是MFC罢
    呵呵
      

  5.   

    我是做一个网管系统
      被监控的对象的数据存在缓冲区里S里,我现在要把他们分类显示在LIST CTROL中 
     如Statistic 
        Call
        Terminal等(在COMBO)中选择
    然后在LIST 中显示相应的内容!
      

  6.   

    如果你用的是VC6的话,对标准C++不是支持的很好.
    你可以包含MFC头文件
    #include "afxcoll.h"
    并将声明:
    map<CString,CString> msgMap;
    改为:
    CMapStringToString msgMap;
    其它代码不变
      

  7.   

    你说的内容是字符串吧.
    这样子已经可以满足你的要求了呀
    你把分类类别作为(键)存储.
    并动态的更新相应的内容(值).用COMBO选定项作为键即可找到其对应的内容.
    显示就可以了.
      

  8.   

    比如说:
    msgMap["Stastics"]="stastics info...";
    msgMap["Call"]="call info...";
    msgMap["Terminal"]="Terminal info...";当然,组合框也要添加相应项:
    m_cmb.AddString("Stastics");
    m_cmb.AddString("Call");
    m_cmb.AddString("Terminal");在你需要提取相应类别内容的地方:
    CString strkey;
    m_cmb.GetLBText(m_cmb.GetCurSel(),strkey); //m_cmb是COMBO控件变量
    msgMap[strkey] 就是你要取得的内容(字符串)呀添加到列表框就行了如果你相应类别的内容改变了.只要直接更新键值对的值就行了:
    比如:
    Stastics 类别的内容发生改变了
    只要:
    msgMap["Stastics"]="新的内容";
    或:
    CString strNew;
    strNew=msgMap["Stastics"];
    strNew+="新的内容";
    msgMap["Stastics"]=strNew;当你再在组合框中选择Stastics类别的时候
    msgMap["Stastics"]自然就是最新的内容了.
      

  9.   

    你能不能帮我综合的具体提供源代码!
      我是用的MFC
      谢了!
      

  10.   

    要取的内容是从被管对象传过来的数据,是实时监控的数据
    不过传过来的数据的分类是固定的  只是其中有些数据变了 如 Current call:XXX(这个是变化的),我是用VC6做的
      

  11.   

    以上的可以满足你的需求了.
    VC7和VC6用法一样.
    我没有装的VC6.
      

  12.   

    msgMap["Stastics"]="stastics info...";
    msgMap["Call"]="call info...";
    msgMap["Terminal"]="Terminal info...";
      
     这个加在什么地方?
    m_cmb.GetLBText(m_cmb.GetCurSel(),strkey); 
    编译器报错是:
      GetCurrentMessage' : cannot access protected member declared in class 'CWnd'
            d:\program files\microsoft visual studio\vc98\mfc\include\afxwin.h(1903) : see declaration of 'GetCurrentMessage'
      

  13.   

    我要COMBO中的信息与字串S中匹配怎么匹配
       定义的S在void CHFGKMagDlg::OnSelchangeCombo() 
    下面 ,S是个CString类型,定义在OnSelchangeCombo()函数里面
      

  14.   

    当你管理的内容发生变化时
    可能需要更新MAP中的信息.
    把msgMap["Stastics"]="stastics info...";
    msgMap["Call"]="call info...";
    msgMap["Terminal"]="Terminal info...";
    加在你需要更新内容的地方.
    具体视你的代码而定.也可能是一个按钮,也可能是定时器事件里(因为你提到实时更新么).
      

  15.   

    如果S存放的是你的内容的话.
    你应该这样子:
    msgMap["Stastics"]=S;
    同时把类别字串"Stastics"加入到COMBO项中.
    要匹配的话.直接msgMap["COMBO选中项"]就匹配到你的S串了.
      

  16.   

    while ((i = Receive(buf,1024)) > 0)
    {
    rs += CString(buf, i);        switch (rs)

    case (rs == "statistics"):
     m_pWnd->m_RawBufsta.WriteBuffersta(buf,i);break;
    case(rs == "terminal"):
     m_pWnd->m_RawBufter.WriteBufferter(buf,i);break;
    我怎么从RS从匹配相应的信息呢
      

  17.   

    从rs中找出stastistics开头的字符串 在把它写入WriteBuffersta()中,参考上面的代码,上面的代码写错了
      我该怎么做!
      

  18.   

    号码是多少?
       while ((i = Receive(buf,1024)) > 0)
    {
    rs += CString(buf, i);        switch (rs)

    case (rs == "statistics"):
     m_pWnd->m_RawBufsta.WriteBuffersta(buf,i);break;
    case(rs == "terminal"):
     m_pWnd->m_RawBufter.WriteBufferter(buf,i);break;
    我怎么从RS从匹配相应的信息呢
    从rs中找出stastistics开头的字符串 在把它写入WriteBuffersta()中,参考上面的代码,上面的代码写错了
      我该怎么做!
      

  19.   

    如果你每次是接受一个整串的话.
    新增一个比较的临时串不就可以了么
    CString strcomp;
    while ((i = Receive(buf,1024)) > 0)
    {
    strcomp=CString(buf, i);
    rs+=strcomp; //不影响你RS的内容动态增加 switch (strcomp)

    case (strcomp == "statistics"): //其实你每次只比较当前读取的串,作为标志来识别,是么
    m_pWnd->m_RawBufsta.WriteBuffersta(buf,i);break;
    case(strcomp == "terminal"):
    m_pWnd->m_RawBufter.WriteBufferter(buf,i);break;
    }

    }
      

  20.   

    如果要查找开头的话:
    如果你每次是接受一个整串的话.
    新增一个比较的临时串不就可以了么
    CString strcomp;
    while ((i = Receive(buf,1024)) > 0)
    {
    strcomp=CString(buf, i);
    rs+=strcomp; //不影响你RS的内容动态增加 switch (strcomp)

    case (strcomp.Find("statistics") >=0): //其实你每次只比较当前读取的串,作为标志来识别,是么
    m_pWnd->m_RawBufsta.WriteBuffersta(buf,i);break;
    case(strcomp.Find("terminal") >=0):
    m_pWnd->m_RawBufter.WriteBufferter(buf,i);break;
    }

    }