MFC线程中的数据如何传回对话框

在线程中通过处理变量,得到的数据想传到对话框中的CListBox中显示,怎么写代码?... 在线程中通过处理变量,得到的数据想传到对话框中的CListBox中显示,怎么写代码? 展开
 我来答
amote258
推荐于2017-09-08 · TA获得超过1964个赞
知道小有建树答主
回答量:1101
采纳率:0%
帮助的人:946万
展开全部
这是个问题
在线程中不能直接使用GetDlgItem等MFC函数
更不能使用UpdateData这个函数
解决方法还是有的
定义CListBox 类 变量 即 CListBox m_listbox;
新线程函数会参数接受一个void类型参数,所以可以把这个m_listbox的地址&m_listbox 传递过去
在线程函数里 通过CListBox * list=参数;
得到了变量的控制权,想干啥就干啥吧
请看下面的例子,道理是一样的

假如你的 编辑框 ID 为IDEDIT,请为你的编辑框添加一个 控件变量,假如这样
CEdit m_edit;//看清楚哦,不是CString类型,而是CEdit 类型
然后再 对话框 初始化函数 OnInitDialog()里的 //TODO位置 添加如下源码
AfxBeginThread(ThreadProc,&m_edit,THREAD_PRIORITY_NORMAL,0,0,NULL);//看清楚第二个参数。要传递给新的线程ThreadProc。
UINT ThreadProc(LPVOID Param)//他是全局函数,不可以定义在类里,最好放在初始化函数上面
{
CEdit *myeidt=(CEdit *)Param;//新线程终于得到了编辑框的控制权。
int i=0;
CString s="在线程里修改文本";
myeidt->SetWindowText(s);//修改编辑框文本。

}
}
追问
举个例子吧:
在按钮Begin中创建线程FO,在线程B中将变量pages的值输出到对话框中的ID为IDC_LIST1的CListBox中。
代码怎么写?只要写按钮和线程函数就可以。
追答
为IDC_LIST1声明 一个 类变量 CListBox    m_list;
在按钮Begin中创建线程FO
AfxBeginThread(FO,&m_list,THREAD_PRIORITY_NORMAL,0,0,NULL);//看清楚第二个参

新线程 如下
UINT FO(LPVOID Param)//他是全局函数,不可以定义在类里,最好放在初始化函数上面
{
CListBox *n_list=(CListBox *)Param;//新线程终于得到了编辑框的控制权。
//假设pages是CString类型,如果不是请转换。
n_list->AddString(pages);//在适当的位置使用

}

以上源码已经非常简单明了,如果你还是看不懂,或不会处理的话。你还是放弃学习VC++
hw584521314
2013-01-10 · TA获得超过120个赞
知道小有建树答主
回答量:135
采纳率:50%
帮助的人:32.6万
展开全部
楼下回答应该还是不行,两个思路:
1.将CListBox窗口的句柄传入线程,线程中调用raw API对listbox的窗口进行处理
2.同样将句柄传入,线程中用SendMessage或者Postmessage 进行通信(例如WM_COPYDATA) 在主线程中拦截这个消息,并取出数据进行处理
3.在进程空间中设置一个内存映射文件,并建立一个事件对象EVENT,线程处理后的结果放入内存映射文件中后,设置event,主线程去内存映射文件中去读数据
4.用管道通信
5.用socket通信
6.用event加全局缓冲区char buf[500]通信并同步。
7.线程将结果写入硬盘文件,主线程去文件中读信息
追问
举个例子吧:
在按钮Begin中创建线程FO,在线程B中将变量pages的值输出到对话框中的ID为IDC_LIST1的CListBox中。
代码怎么写?只要写按钮和线程函数就可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式