MFC正在从线程将文本附加到富编辑框

  • 本文关键字:编辑 文本 线程 MFC c++ mfc
  • 更新时间 :
  • 英文 :


我正试图在整个程序中创建一种日志记录系统,从线程中,我可以将文本添加到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及其底层函数?我想不会。

谢谢!

您只想从一个线程(至少在任何一次(执行此操作。原因很简单:你必须向控件发送(至少(两条消息,给它一些文本(一条设置当前选择,另一条用一些文本替换选择(。

如果两个(或多个(线程试图同时执行此操作,您将很快遇到竞争条件。它们取决于在设置选择和替换选择之间保持不变的选择。如果不这样做,结果将不会如预期的那样(如果多个线程同时尝试这样做,则不会保持不变(。

您希望选择一个线程来拥有该控件。其他线程可以将它们的文本片段发送给拥有线程,并让它将文本添加到控件中。

理论上,您可以使用互斥锁来保护控件,因此一次只有一个线程能够修改它。这当然可以工作,但至少在大多数情况下,将文本传递给单个线程几乎没有什么好处。

最新更新