关于MFC编辑框显示字符的问题

chuanye23 chuanye23 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
大家好,我是个菜鸟,刚接触VC不久,最近在调试一个基于VC的测井系统,其中有个问题一直在困惑着小弟,还请大神不吝赐教!我先把现实的界面截上来:

大家可以看到,预想的情况是:当我点击启动按钮时,在“压力采样”和“温度采样”中就会不断的出现采样值显示,其中数据是由USB接口传输的。关于接收部分的代码如下:
void CCalDlg::OnTimer(UINT nIDEvent)
{
//SYSTEMTIME st1,st2;
// GetLocalTime(&st1);
switch(nIDEvent)
{
case 2:
{
DWORD dwBytesWritten=0;
DWORD dwBytesRead=0;
long m_nPAv = 0;
long m_nTAv = 0;
CString str;
BYTE msg[5];
DeviceRead( msg, 5, &dwBytesRead, 1000);
if(msg[1]==(BYTE)0x51)
{
m_nPAv = (long)msg[2] * 256 + (long)msg[3];
str.Format("%d",m_nPAv);
GetDlgItem(IDC_ED_P_AV)->SetWindowText(str);
msg[0] = 0x63;
msg[1] = 0x52;
msg[2] = 0xda;
msg[3] = 0xda;
msg[4] = 0x69;
DeviceWrite( msg, 5, &dwBytesWritten, 1000);
//GPutACOM((BYTE)0x52); //要求下一次传送温度
}
else if(msg[1]==(BYTE)0x52)
{
m_nTAv = (long)msg[1] * 256 + (long)msg[2];
m_nTAv = m_nTAv/4;
str.Format("%d",m_nTAv);
GetDlgItem(IDC_ED_T_AV)->SetWindowText(str);
msg[0] = 0x63;
msg[1] = 0x51;
msg[2] = 0xda;
msg[3] = 0xda;
msg[4] = 0x68;
DeviceWrite( msg, 5, &dwBytesWritten, 1000);
//GPutACOM((BYTE)0x52); //要求下一次传送温度
}
break;
}
default:break;
}
//GetLocalTime(&st2);
//BYTE msg[5];
}

上述代码的主要意思是:(设置了一个2号定时器500ms)当定时器到时便使用DeviceRead函数获得5个字节的数据,根据第二个字节的内容分析是压力采样帧还是温度采样帧并相应显示,最后再使用DeviceWrite函数发送对应的命令帧要求下位机提供采样值。具体的自定义函数我就不细讲了,总之在设置断点调试时每次进入上述定时器响应函数时都可以获得合理的采样值。
但是问题就在于,当全速运行时,编辑框内的数据显示就有问题了,压力采样的数据跳变了三次后就一直为零了,温度采样值则是显示了一个数据后就再也没变过了,这与断点调试的结果大相径庭。然后我再次调试,发现即使在数据查看窗口中获得了合理的数据,但是显示的压力一直为零,温度值也不变。而且还有一个问题是,每次运行编辑框内显示的数据变化过程都是一样的,这根本不符合采样的原理啊!!!
依小弟粗见,这里显示的部分(SetWindowText附近)应该是有问题,具体是什么问题我也不知道啊,在此求助大神看看,有叙述不清楚的地方请尽管问小弟,谢谢了!
(啊!!打字好辛苦啊)
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
chuanye23
C++ 语言 65,214 成员 250,514 内容