vc 如何动态显示变量于编辑框

vc如何动态显示变量于编辑框悬赏分:10-离问题结束还有14天22小时新建一个基于MFC对话框的应用程序,在界面上只放了两个控件:按钮和编辑框(变量名m_A),点击按钮,... vc 如何动态显示变量于编辑框
悬赏分:10 - 离问题结束还有 14 天 22 小时
新建一个基于MFC对话框的应用程序,在界面上只放了两个控件:按钮和编辑框(变量名m_A),点击按钮,消息响应函数:
void CShiyan2Dlg::OnOK()
{
// TODO: Add extra validation here
for(int i = 0;i< 10;i++)
{

m_A+=i;
Sleep(100);
UpdateData(FALSE);//由里到外

}

}
为何“一下子”就出现了45了?
m_A是int型的。
展开
 我来答
cknight123
2009-11-23 · TA获得超过964个赞
知道小有建树答主
回答量:532
采纳率:0%
帮助的人:592万
展开全部
有个误区,首先默认的mfc工程是一个基于消息的单线程程序。

单线程是关键,这就意味着代码要一步一步的执行,在一个函数没有执行完毕的时候不会切换到其他函数中。

楼主的程序就是这样,程序执行时候不会去执行重绘等函数,也不会去调用什么更新,重新显示,他会一直循环10次,把ok函数彻底运行完毕后才会去做别的事情。这时候就会发现 m_A的值已经是 45了,所以显示了出来。

------------------------------------
你要是想实现这种渐变的显示过程,要用到线程,单开一个线程去做你的事情。
void CShiyan2Dlg::OnOK()
{

CWinThread* pThread=AfxBeginThread(ThreadFun,this);
}

UINT ThreadFun(LPVOID para)
{
CShiyan2Dlg* pDlg = (CShiyan2Dlg*)para;
for(int i = 0;i< 10;i++)
{

pDlg->m_A+=i;
Sleep(100);
CString strText;
strText.Format(_T("%d"),pDlg->m_A);
pDlg->SetDlgItemTextW(IDC_EDIT1,strText);

}
return 0;
}

线程里调用dlg指针有一些限制,比如UpdateData函数就无法使用,会引起指针自检时候的错误
silvergingko
推荐于2016-07-22 · TA获得超过5945个赞
知道小有建树答主
回答量:688
采纳率:0%
帮助的人:869万
展开全部
“楼主的程序就是这样,程序执行时候不会去执行重绘等函数,也不会去调用什么更新,重新显示,他会一直循环10次,把ok函数彻底运行完毕后才会去做别的事情。这时候就会发现 m_A的值已经是 45了,所以显示了出来。”

致cknight123:
为什么在OnOk中不会调用更新呢?为什么说要等到OnOk彻底运行完毕后才会去做别的事情?不是在OnOk中还有对UpdateData(FALSE)的调用吗?

如果说是线性的,那么执行到UpdateData时,会进入UpdateData中,这个函数中究竟做了什么呢?难道就不能在这个函数中对控件进行更新?(跟踪了下,调用了SetWindowText)

最后魔高丈所说的静态编辑框的确是更新了!!

我也没找到答案,只是做了测试:
对 for(int i = 0;i< 10;i++)中调用UpdateData(FALSE)时,编辑框控件捕捉不到OnEnUpdate和OnEnChange,也没有任何消息被捕捉到,静态文本框控件也没有任何消息。
如果改为SetDlgItemInt,则编辑框控件能捕捉到OnEnUpdate和OnEnChange,但还是没有任何消息被捕捉到,静态文本框控件也没有任何消息。
尽管编辑框有OnEnChange说明编辑框是被SetDlgItemInt更新了,可结果还是意料之外,编辑框的确没有在OK按钮按下后未弹起前,内容被重画过。
至于sleep一百个毫秒,肉眼是能看到变化的,因此不需要sleep更长时间。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
何处淬吴钩
2009-11-23 · TA获得超过5045个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2412万
展开全部
整型,检查下使用前有没有初始化。不可以的话按我说的办法,把变量设置成CEdit型的,然后用SetWindowText。

m_A,从命名看不出你的变量类型。按你的描述应该是CString类型的,建议命名遵循匈牙利表示法。
在你的对话框中添加一个整型变量m_nCount,构造函数中初始化为0.

void CShiyan2Dlg::OnOK()
{
// TODO: Add extra validation here
for(int i = 0;i< 10;i++)
{

m_nCount+=i;
m_A.Format(_T("%d",m_nCount));
Sleep(100);
UpdateData(FALSE);//由里到外

}

}
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5a51b92
推荐于2016-11-21 · TA获得超过2923个赞
知道答主
回答量:295
采纳率:78%
帮助的人:15.2万
展开全部
新建一个基于MFC对话框的应用程序,在界面上只放了两个控件:按钮和编辑框(变量名m_A),点击按钮,消息响应函数:
void CShiyan2Dlg::OnOK()
{
// TODO: Add extra validation here
for(int i = 0;i< 100;i++)
{
UpdateData(TRUE);
m_A+=m_A;
Sleep(1);
UpdateData(FALSE);
}

结果,运行通过,却看不到动态显示,编辑框中只有0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chichujn
2009-11-23 · TA获得超过663个赞
知道小有建树答主
回答量:1534
采纳率:50%
帮助的人:1105万
展开全部
这种要设置定时器来做的。
添加WM_TIMER消息。然后更新编辑控件,记得加UpdateData函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式