动态刷新edit 控件内容?在线等待,随时加分
不停的刷新edit的内容,如果这样:
void Cmydlg::Onbutton1()
{
bool stop=false;
do
{
SetDlgItemText(IDC_EDIT1,stingx);
}while(stop==false);
}
这样会使主程序处于死锁状态,如果启动线程执行:
void Cmydlg::Onbutton1()
{
CWinThread *pThread=AfxBeginThread(Gets,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
}
UINT Gets(LPVOID pParam)
{
bool stop=false;
do
{
SetDlgItemText(IDC_EDIT1,stingx);//此处不行,无法执行
//或者{Cmydlg dlg; dlg.SetDlgItemText(IDC_EDIT1,stingx);//也不行
}while(stop==false);
return 0;
}
应该如何操作?保证edit中的数据不断刷新,但不影响程序的执行(其他的按钮可以操作)?谢谢众位!
问题点数:100、回复次数:12Top
1 楼goodlcp(goodlcp)回复于 2002-10-12 11:01:24 得分 20
void Cmydlg::Onbutton1()
{
CWinThread *pThread=AfxBeginThread(Gets,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
}
UINT Gets(LPVOID pParam)
{
Cmydlg *ttt=(Cmydlg*)pParam;
bool stop=false;
do
{
ttt->SetDlgItemText(IDC_EDIT1,stingx);//此处不行,无法执行
//或者{Cmydlg dlg; dlg.SetDlgItemText(IDC_EDIT1,stingx);//也不行
}while(stop==false);
return 0;
}
Top
2 楼kwiner(ak.net)回复于 2002-10-12 11:04:07 得分 0
不是 UpdateData(FALSE)吗Top
3 楼flood75(9527)回复于 2002-10-12 11:06:03 得分 10
线程中要获得窗口的句柄
在线程开始处添加:
CCmydlg *MainDlg;
MainDlg=(Cmydlg *)lpParam;
后面使用:
MainDlg->SetDlgItemText(IDC_EDIT1,stingx);Top
4 楼cwkxm(cwkxm)回复于 2002-10-12 11:08:49 得分 10
很简单:
设置一个定时器:
SetTimer(1,100,NULL) //每100毫秒刷新一次
然后在WM_TIMER消息处理函数中执行:SetDlgItemText(IDC_EDIT1,stingx);
或者干脆将IDC_EDIT1通过成员变量映射为
CString stingx 和 CEdit m_edit;
然后在WM_TIMER消息处理函数中执行:UpdateData(false);
Top
5 楼mcsdu_net(一生孤独)回复于 2002-10-12 11:10:34 得分 0
可以用OnTimer函数,设定时间间隔,在OnTimer中刷新Top
6 楼zhanvi(流浪代码)回复于 2002-10-12 11:17:21 得分 0
线程调用传递编辑框的指针,
然后在线程函数中使用传递过来的指针
CEDIT* edit=GetDlgItem(IDC_EDIT1)
AfxBeginThread(GetSafeHwnd(),edit);
GetSafeHwnd(LPVOID lpparam)
{
CEDIT*e=(CEDIT*)lpparam;
....
}
Top
7 楼goodlcp(goodlcp)回复于 2002-10-12 11:21:26 得分 0
答
线程调用传递编辑框的指针,
然后在线程函数中使用传递过来的指针
CEDIT* edit=GetDlgItem(IDC_EDIT1)
AfxBeginThread(GetSafeHwnd(),edit);
GetSafeHwnd(LPVOID lpparam)
{
CEDIT*e=(CEDIT*)lpparam;
....
}
这段代码是错误的。GetSafeHwnd()传递的指针一定能转换成CEdit指针吗。
如果在对话框中调用此方法,返回的是对话框指针,而且是HWND型,不是CWnd型。Top
8 楼fz_zhou(vcfan)回复于 2002-10-12 11:29:05 得分 0
UpdateWindow;Top
9 楼sjsj(虚怀若谷)回复于 2002-10-12 11:38:53 得分 50
我看楼主的困难是在这一句:
SetDlgItemText(IDC_EDIT1,stingx);//此处不行,无法执行
其实这是可以解决的,关键是要找到SetDlgItemText所属的对话框的对象指针。
如果你是简单的对话框程序,那么这样就行了:
((CYourDlg *)AfxGetApp()->m_pMainWnd)->SetDlgItemText(IDC_EDIT1,stingx);
Top
10 楼sjsj(虚怀若谷)回复于 2002-10-12 11:40:31 得分 0
如果是SDI或者MDI的程序,也是类似搞定。Top
11 楼qxwang(wang)回复于 2002-10-12 12:28:08 得分 0
使用定时器,在定时器响应函数中对EDIT内容刷新Top
12 楼YoungBoz(西山月)回复于 2002-10-12 12:51:06 得分 10
在你的程序中加一行PeekMessage函数,检查有无消息。这样就不会使程序死锁了,这么用法你就查找一下MFC的源代吗吧。(把PeekMessage放到Find in file中去);Top




