VC窗口之间的数据共享 利用MFC编写了基于对话框的界面,在界面对话框有增加了两个对话框,一个是串口接收的对话框MSCComm控件,另一个对话框是负责显示数据的。我在显示对话框中增加了一个串口类的指针,指向串口类中定义的一个数组元素,但是数据却显示不出来这时怎么回事啊?恳请各位帮帮忙?我很郁闷!!!高了一周了没有解决!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一个是CPort类另一个是CShow类,在CPort类使用CMCComm控件,接收数据函数:void CPortDlg::OnOnCommMscomm1() { // TODO: Add your control notification handler code here int nEvent=0; VARIANT variant_inp; COleSafeArray safearray_inp; LONG k,len; BYTE rxdata[2048]; CString strtemp; CString t[10];//,t1,n[5]; //char a[10]; //CWorkStatusDlg *pWork; nEvent=m_ctrlComm.GetCommEvent(); switch(nEvent) { case 2: variant_inp = m_ctrlComm.GetInput(); safearray_inp = variant_inp; len = safearray_inp.GetOneDimSize(); for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//转换成BYTE型数组 for(k=0;k<len;k++) { BYTE bt=*(char*)(rxdata+k); //字符型 //if(m_ctrlHEXDISPLAY.GetCheck()) strtemp.Format("%02X",bt); //将字符以十六进制的形式送入临时变量strtemp存放,注意这里加上你一个空格 //else // strtemp.Format("%c",bt); t1=t1+strtemp; //加入接收编辑框对应的字符串 //m_Receive+=strtemp; //添加数据协议头判断 if(bt ==0xfe) { char* pStr = new char[ t1.GetLength() + 1 ] ; pStr = t1.GetBuffer(t1.GetLength()); for (int i = 0; i < 10; i++) t[i].Format("%c", pStr[i]); for (int j = 0; j < 5; j++) { n[j] = t[j*2]+t[j*2+1]; n[j] = HexToDecimal(n[j]); m_Receive += n[j]+"\r\n";//在这里还是字符形式 } for(int p = 0;p<5;p++) { WorkData[p]=atoi(n[p]); } //MessageBox(itoa(WorkData[1],a,10)); } } default: break; } UpdateData(false);}数据已经被处理成十进制的正数,我在显示类中加了一个定时器函数来显示:void CShow::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default m_varWorkV=m_pPort1->WorkData[0]; m_varWorkI +=1; UpdateData(false); CDialog::OnTimer(nIDEvent);}m_varWorkV这个在编辑框里面显示是0,m_varWorkI 这个在编辑框里面就动态加1;m_pPort1->WorkData[0];没有把数据传过来?还是有其他原因?我很郁闷!!求救啊 把 WorkData 定义为静态吧,m_pPort1::WorkData[0] 调用 存放数据的声明成全局的,或者公有的公有的:CShow类中声明存放数据的类的对象,然后调用全局的:extern ,然后使用 question 换肤软件怎么开发? 如何实现像联众游戏室右上角的选项卡 在OnInitDialog()里初始化的这些东西是什么意思!如果是初始化对话框.哪每个涵数是什么意思呀!\给分 置疑所谓“强制结贴” 关于DLL和注册表(100分) 能不能给vc做插件,比如加入一些象类生成器一类的工具? 我想在单文档的客户区里画很平均的小方格,就象围棋棋盘一样,怎么做? 嗨,我今天发现有地方在送免费VCD,以下是地址,去看看吧: 请教:runtime error '91' CEdit 动态创建时注意点 求助,应用程序对话框自动补全
void CPortDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
int nEvent=0;
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG k,len;
BYTE rxdata[2048];
CString strtemp;
CString t[10];//,t1,n[5];
//char a[10];
//CWorkStatusDlg *pWork;
nEvent=m_ctrlComm.GetCommEvent();
switch(nEvent)
{
case 2:
variant_inp = m_ctrlComm.GetInput();
safearray_inp = variant_inp;
len = safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换成BYTE型数组
for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k); //字符型
//if(m_ctrlHEXDISPLAY.GetCheck())
strtemp.Format("%02X",bt); //将字符以十六进制的形式送入临时变量strtemp存放,注意这里加上你一个空格
//else
// strtemp.Format("%c",bt); t1=t1+strtemp; //加入接收编辑框对应的字符串
//m_Receive+=strtemp;
//添加数据协议头判断 if(bt ==0xfe)
{
char* pStr = new char[ t1.GetLength() + 1 ] ;
pStr = t1.GetBuffer(t1.GetLength());
for (int i = 0; i < 10; i++)
t[i].Format("%c", pStr[i]);
for (int j = 0; j < 5; j++)
{
n[j] = t[j*2]+t[j*2+1];
n[j] = HexToDecimal(n[j]);
m_Receive += n[j]+"\r\n";//在这里还是字符形式
}
for(int p = 0;p<5;p++)
{
WorkData[p]=atoi(n[p]);
}
//MessageBox(itoa(WorkData[1],a,10));
}
}
default: break;
} UpdateData(false);
}数据已经被处理成十进制的正数,我在显示类中加了一个定时器函数来显示:
void CShow::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
m_varWorkV=m_pPort1->WorkData[0];
m_varWorkI +=1;
UpdateData(false);
CDialog::OnTimer(nIDEvent);
}
m_varWorkV这个在编辑框里面显示是0,m_varWorkI 这个在编辑框里面就动态加1;
m_pPort1->WorkData[0];没有把数据传过来?还是有其他原因?我很郁闷!!求救啊
公有的:CShow类中声明存放数据的类的对象,然后调用
全局的:extern ,然后使用