【C++】关于数据循环滚动显示的问题(抽奖)

阿兰杨 2013-07-16 11:06:08
需求: 正在做一个用于抽奖的小程序,相关数据从csv文件中读取;
现在需要在按下【开始】按钮后在相关控件(Edit)上循环(或乱序)滚动显示数据;
在按下【停止】按钮后显示抽奖结果。

现状: 已实现了按下按钮后直接显示抽奖结果的功能,结果(姓名、电话、性别)分别表示在3个Edit控件上

问题点: 数据的滚动显示怎么实现(3个Edit)?是否需要用到“计时器”?请给一个小例子或结合当前代码予以提示,谢谢~

以下为当前的代码:
// 【抽奖】按钮按下
void CLotteryDlg::OnBnClickedBtnLot()
{
// TODO: 在此添加控件通知处理程序代码
CString strFileName;
strFileName.Empty();
strFileName.Format("2013.csv");
ReadFile(strFileName); // 读取文件
return;
}

// 读取文件
BOOL CLotteryDlg::ReadFile(CString strFileName)
{
FILE *fRead;
fRead = fopen((const char *)strFileName, "rt");
if (fRead == NULL)
{
AfxMessageBox("无法读取数据文件");
return FALSE;
}
CStdioFile inFile(fRead);
CString strLine, strResult;
strLine.Empty();
strResult.Empty();
CStringArray astrTemp;
int nCount = 0;
while (inFile.ReadString(strLine)) // 循环读取每一行
{
astrTemp.Add(strLine);
strLine.Empty();
nCount++; // 计算行数
}
nCount--;// 去掉表头行
inFile.Close();
srand((unsigned)time(NULL));
int nLotNum = (rand() % nCount) + 1;
strLine = astrTemp[nLotNum]; // 得到抽奖结果的字符串
UpdateViewData(strLine); // 数据分割·画面更新
return TRUE;
}

// 数据分割·画面更新
void CLotteryDlg::UpdateViewData(CString strData)
{
CString strTemp;
strTemp.Empty();
int nCnt = 0, nSituation = 0;
while (nCnt < 3)
{
nSituation = 0;
strTemp.Empty();
if (nCnt < 2)
{
while ((unsigned char)strData[nSituation] != 44)
{
nSituation++;
}
strTemp = strData.Left(nSituation);
strData = strData.Right(strData.GetLength() - nSituation - 1);
nCnt++;
}
else
{
nCnt++;
strTemp = strData;
}

switch (nCnt)
{
case 1:
m_strName = strTemp; // 显示姓名
break;
case 2:
m_strTelPhone = strTemp; // 显示电话
break;
case 3:
m_strSex = strTemp; // 显示性别
break;
default:
break;
}
}
UpdateData(FALSE);
}
...全文
183 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿兰杨 2013-07-16
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
1 CStringArray astrTemp; 放 对话框 CStringArray m_astrTemp; 定时器 中: static int ii=0; edit1=m_astrTemp【ii】; edit2=m_astrTemp【ii+1】; edit3=m_astrTemp【ii+2】; ii+3; UpdateData(FALSE);
我已经做好了。 1、添加了timer消息; 2、在【开始】btn按下时settime(1, 100, null); 3、在【停止】btn按下时killtime(1); 4、timer函数中更新为随机行+n行的内容即可。 ---------------------------------------- 就你一人回复,分就给你好了
schlafenhamster 2013-07-16
  • 打赏
  • 举报
回复
1 CStringArray astrTemp; 放 对话框 CStringArray m_astrTemp; 定时器 中: static int ii=0; edit1=m_astrTemp【ii】; edit2=m_astrTemp【ii+1】; edit3=m_astrTemp【ii+2】; ii+3; UpdateData(FALSE);

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧