MFC正在从线程将文本附加到富编辑框
MFC appending text to Rich Edit Box from thread
我正试图在整个程序中创建一种日志记录系统,从线程中,我可以将文本添加到GUI中的Rich编辑框中。我对这个堆栈不太熟悉,但从阅读中我意识到你无法访问函数,必须使用控制消息才能访问。
我在尝试这样的东西:
CString ExampleMessage("hi");
HWND hEdit = GetDlgItem (m_pMainWnd->GetSafeHwnd(),IDC_RICHEDIT22);
int ndx = GetWindowTextLength (hEdit);
SetFocus (hEdit);
SendMessage (hEdit, EM_SETSEL, (WPARAM)ndx, (LPARAM)(LPCTSTR)ExampleMessage );
然而,似乎没有出现任何消息。有没有办法在线程中获取CRichEditCtrl及其底层函数?我想不会。
谢谢!
您只想从一个线程(至少在任何一次(执行此操作。原因很简单:你必须向控件发送(至少(两条消息,给它一些文本(一条设置当前选择,另一条用一些文本替换选择(。
如果两个(或多个(线程试图同时执行此操作,您将很快遇到竞争条件。它们取决于在设置选择和替换选择之间保持不变的选择。如果不这样做,结果将不会如预期的那样(如果多个线程同时尝试这样做,则不会保持不变(。
您希望选择一个线程来拥有该控件。其他线程可以将它们的文本片段发送给拥有线程,并让它将文本添加到控件中。
理论上,您可以使用互斥锁来保护控件,因此一次只有一个线程能够修改它。这当然可以工作,但至少在大多数情况下,将文本传递给单个线程几乎没有什么好处。
相关文章:
- 在QT C++编辑Qtable模型数据时,我需要得到一个小盒子,我需要显示编辑文本,这怎么可能?
- 如何将“编辑文本值”传递给函数
- C++ 从另一个程序窗口的内存中编辑文本
- 在C++的“编辑”文本框中禁用文本编辑,同时保持启用滚动
- Win32组合框,打印所选要编辑文本框的名称
- C++,打开和编辑文本文件中的数字数据,并将结果放入新文件中
- 当按下shift时,对编辑文本控件进行子类处理以接受小写字符
- C++读取然后编辑文本文件
- 如何在 C++ 中显示通知,当鼠标单击可编辑文本框时
- 检测富编辑文本控件中的换行符
- 可编辑的QComboBox:将编辑文本与项目文本同步
- 用C++编辑文本文件
- 如何使用 c++ 编辑文本文件数据
- C++ 编辑文本文件中行中的特定单词
- 如何使用C++编辑文本文件中的行
- 使用 C++/WinAPI/MFC 在编辑/文本框控件上捕获特殊单击事件
- 编辑文本框的SDL
- 信号编辑文本已更改为可编辑的QComboBox设置光标位置在设置编辑文本之后的末尾
- 在实现 OpenFileDialog 时,"System.IO.FileStream"显示在生成的编辑文本框中,而不是文件名和路径上。如何?
- Win32 API:如何使编辑文本仅在c++中接受无符号浮点数