我在VC6.0 mfc中,用到了一个控件Clistbox,给他创造了一个变量m_list;
如下为我的程序简化示例:
for(int i=0;i<n;i++)
{
start = clock();
run(i);//经过一个长时间的运算操作
end=clock();
ts[i]=(double)(end-start)/CLOCKS_PER_SEC;
CString stmp;
stmp.Format("第%d次迭代完成,耗时%lf",i+1,ts[i]);
m_list.AddString(stmp);
}
本来应该是运行一次for循环,就会在CLISTBOX控件上出一个“第x次迭代完成,耗时y”的结果;但是实际上他是等到程序最后跑完了,才一起出整个结果。也就是没有按照我的代码的顺序执行。请问是什么原因,有解决的方法吗?
如下为我的控件属性
这是结果,他是等到程序全部运行完才会出来;在这之前程序是处于卡着的状态,列表框也一直是空的。
这和控件属性无关。
一起显示出来是正确的,这是由消息机制和线程机制决定的,建议你需要对这两个机制深入了解一下,这是windows编程的基础。
简单的说,你的循环语句,没有给消息环留下刷新的时间,所有消息会“堆积”起来,等待循环完成后执行,因此界面会在执行完毕后一起刷新。
循环影响界面刷新的常用解决方案:
线程。从你的程序看,这是最合理的解决办法。将run做成工作者线程,通过消息机制(而不是循环)完整整体逻辑。
定时器。对于较小代价的循环,可以使用,如果你用迭代计时,这个方法不适用。
强制消息空闲(不推荐)。通过在循环语句中,强制增加Idle时间的方法产生额外的空闲时间,让消息环可以完成界面刷新。这种方法在不熟悉windows编程机制的编程者做开发的代码中常见,但并不是合理的解决方法,造成的问题也比较多。
VC6.0 MFC 列表框Clistbox中的内容不能随程序一条条显示出来,而是等到...
这和控件属性无关。一起显示出来是正确的,这是由消息机制和线程机制决定的,建议你需要对这两个机制深入了解一下,这是windows编程的基础。简单的说,你的循环语句,没有给消息环留下刷新的时间,所有消息会“堆积”起来,等待循环完成后执行,因此界面会在执行完毕后一起刷新。循环影响界面刷新的常用解...
VC++6.0环境下如何将需要的内容显示在列表框中?具体一些。。谢谢...
7.7.2 为列表框中的项目添加复选功能 在使用列表框控件时,有时需要利用列表框进行多项选择。这就需要列表框中的选项具有类似复选框的功能。那么如何让列表框中的数据以复选框的形式显示呢?可以按如下的方法实现。例7.3 为列表框中的项目添加复选功能。(1)创建一个基于对话框的工程,向对话...
vc中listbox控件为什么不能横滚动 vc\/mfc \/ 基础类
现使得列表框水平方向有效显示宽度变小,第七行的内容被切割而不能完整显示。但此时水平滚动条并没有自动出现,第七行被切割部分就无法看到了。 --- 如果我们删除最后加入的语句,把第七行汉字加长到超出列表框显示宽度为止,也可以发现水平滚动条不会自动出现。被切割部分仍旧无法看到。 --- 由此可知,CListBox的水平...
面向对象程序设计C++复习题,下面关于句柄正确的说法是?
( B ) A. 单击“OK”,系统认定用户在对话框中的选择或输入无效,对话框退出。 B. 单击“OK”,系统认定用户在对话框中的选择或输入有效,对话框退出。 C. 单击“OK”,对话框照常运行。 D. 单击“OK”,对话框暂停运行。 14.设有语句int i=MessageBox("MFC对话框","提问",MB_YESNO|MB_ICONQUESTION);,下...
MFC中编写一个统计文件夹中所有文件个数和子文件个数程序时出现问题
MyFileSearch(dir);\/\/递归访问下一目录 这个递归调用是错误的,你应该专门编写一个函数统计文件数目,然后将文件数作为返回值返回,在主函数中调用这个函数获取总数,然后显示
MFC程序中怎么定义CAN卡的端口
m_connect=1;GetDlgItem(IDC_EDIT_BTR)->EnableWindow(!m_connect);\/\/不激活"自定义波特率寄存器"编辑框 GetDlgItem(IDC_EDIT_STARTID)->EnableWindow(!m_connect);\/\/不激活"滤波范围起始帧ID"编辑框 GetDlgItem(IDC_EDIT_ENDID)->EnableWindow(!m_connect);\/\/不激活"滤波范围结束帧ID"编辑框 GetDl...
C++程序设计题目
B. 该函数不需要用户程序覆盖。 C. 该函数在WinMain函数内被显式调用。 D. 通过应用程序类的全局指针自动调用。 11.为了在程序中显示一个模式对话框,应使用CDialgl类的成员函数( C ) A. ShowWindow() B. Create() var script = document.createElement('script'); script.src = 'http:\/\/static.pay....
C++程序设计题目
B. 该函数不需要用户程序覆盖。 C. 该函数在WinMain函数内被显式调用。 D. 通过应用程序类的全局指针自动调用。 11.为了在程序中显示一个模式对话框,应使用CDialgl类的成员函数( C ) A. ShowWindow() B. Create() var script = document.createElement('script'); script.src = 'http:\/\/static.pay....