c ++ MFC从工作线程设置/附加文本到richedit控件

Posted

技术标签:

【中文标题】c ++ MFC从工作线程设置/附加文本到richedit控件【英文标题】:c++ MFC setting/appending text to a richedit control from a worker thread 【发布时间】:2014-02-03 21:37:37 【问题描述】:

从主线程我可以像这样使用成员变量:

    CString updatetext;
    updatetext.Format(L"character length: %d\n", length );
    long nStart, nEnd;
    m_richeditcont.
    GetSel(nStart, nEnd);
    m_richeditcont.SetSel(nEnd, nEnd);
    m_richeditcont.ReplaceSel(updatetext);

但是,如果没有工作线程,程序就会挂起。您不能使用工作线程中的成员变量,那么我将如何使用工作线程中存储在 updatetext 中的文本来更新 Richedit 控件?

我没有任何实际代码,上面的代码只是一个示例,我只是想知道如何将存储在 updatetext 中的文本从工作线程附加到 Richedit 控件。

【问题讨论】:

【参考方案1】:

工作线程可以使用 PostMessage 或 SendMessage 将数据发送到 GUI 线程。那么GUI线程应该负责修改GUI。请参阅此处的常见问题解答 12:

http://vcfaq.mvps.org/mfc/index.htm

工作线程应该在堆上分配 CString,然后在自定义消息的 lparam 或 wparam 中发布指针。 GUI 线程将指针转换回 CString* 并更新控件。最后,GUI 线程从堆中删除 CString。

【讨论】:

+1 for 最后,GUI 线程从堆中删除了 CString。 非常重要!!

以上是关于c ++ MFC从工作线程设置/附加文本到richedit控件的主要内容,如果未能解决你的问题,请参考以下文章

mfc c++ 将带有 postmessage 的自定义用户消息从工作线程发送到主 ui 线程

如何从工作线程访问 MFC 控件?

从 MFC 中的工作线程调用 Beginwaitcursor 函数

如何从 C++/MFC 程序中获取控制台窗口? [复制]

MFC:在工作线程中使用对象的成员函数时出现访问冲突错误

mfc c++ 从编辑控件更新文本文件