这个加在什么地方? 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'
-------------------------------
可以详细一些么
举个例子
有点不清楚
是以COMBO中选中的字符串作为S的开头么
而字符串里面是
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上(上面的信息存在一个缓冲区里,而且信息是不断增加的)
#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罢
呵呵
被监控的对象的数据存在缓冲区里S里,我现在要把他们分类显示在LIST CTROL中
如Statistic
Call
Terminal等(在COMBO)中选择
然后在LIST 中显示相应的内容!
你可以包含MFC头文件
#include "afxcoll.h"
并将声明:
map<CString,CString> msgMap;
改为:
CMapStringToString msgMap;
其它代码不变
这样子已经可以满足你的要求了呀
你把分类类别作为(键)存储.
并动态的更新相应的内容(值).用COMBO选定项作为键即可找到其对应的内容.
显示就可以了.
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"]自然就是最新的内容了.
我是用的MFC
谢了!
不过传过来的数据的分类是固定的 只是其中有些数据变了 如 Current call:XXX(这个是变化的),我是用VC6做的
VC7和VC6用法一样.
我没有装的VC6.
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'
定义的S在void CHFGKMagDlg::OnSelchangeCombo()
下面 ,S是个CString类型,定义在OnSelchangeCombo()函数里面
可能需要更新MAP中的信息.
把msgMap["Stastics"]="stastics info...";
msgMap["Call"]="call info...";
msgMap["Terminal"]="Terminal info...";
加在你需要更新内容的地方.
具体视你的代码而定.也可能是一个按钮,也可能是定时器事件里(因为你提到实时更新么).
你应该这样子:
msgMap["Stastics"]=S;
同时把类别字串"Stastics"加入到COMBO项中.
要匹配的话.直接msgMap["COMBO选中项"]就匹配到你的S串了.
{
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从匹配相应的信息呢
我该怎么做!
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()中,参考上面的代码,上面的代码写错了
我该怎么做!
新增一个比较的临时串不就可以了么
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;
}
}
如果你每次是接受一个整串的话.
新增一个比较的临时串不就可以了么
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;
}
}