MFC通过线程

时间:2018-07-30 15:45:38

标签: 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及其底层函数?我假设不是。

谢谢!

1 个答案:

答案 0 :(得分:0)

您只想从一个线程执行此操作(至少一次)。原因很简单:您必须向控件发送(至少)两条消息以为其提供一些文本(一个用于设置当前选择,另一条用于将选择替换为一些文本)。

如果两个(或更多)线程尝试同时执行此操作,您将很快陷入竞争状态。它们取决于选择,在设置选择和替换选择之间保持相同。如果不是这样,结果将不会达到预期的效果(并且如果多个线程尝试同时执行此操作,那么结果将不会相同)。

您想选择一个线程来拥有该控件。其他线程可以将其文本片段发送到所属线程,然后将其添加到控件中。

理论上,您可以使用互斥锁来保护控件,因此一次只能有一个线程对其进行修改。当然可以,但是至少在大多数情况下,仅将文本传递给单个线程不会带来任何好处。