1

我正在使用 MFC 和 C++ 为 Windows 编写一个 GUI 应用程序。

所以我需要从我的工作线程向我的主线程发送消息,告诉它更新我的 GUI。但是我不确定如何将消息发送到实际的主线程而不是窗口。事实上,当它收到消息时,我可以看到它在主线程中,但我不确定这是有保证的还是只是运气。

在工人中:

PostMessage( *myTestToolDlg, WM_YOU_HAVE_DATA,UPDATE_GUI, 0 );

在应用程序窗口中:

LRESULT CTestToolDlg::OnData(WPARAM wp, LPARAM )

这是否意味着?

4

2 回答 2

1

threadId = GetCurrentThreadId();您可以通过在主线程中使用类似的东西来获取主线程的线程 ID 然后通过PostThreadMessage(threadId, ...) 从您的工作线程调用向它发送消息。

但是,正如 Hans Passant 所说->这里<-,您应该避免使用PostThreadMessage向 UI 线程发送消息,并且应该更好地将消息发送到它的窗口。

于 2013-08-16T10:51:12.817 回答
0

如果要直接修改 ListBox 或 ListView,可以使用SendDlgItemMessageA()

例子 :

char const* pChar = "My text to be updated";

SendDlgItemMessageA(hWindow, IDC_LISTBOX, LB_DELETESTRING, 0, 0);

SendDlgItemMessageA(hWindow, IDC_LISTBOX, LB_INSERTSTRING, -1, (LPARAM)pChar);

于 2020-07-09T09:27:16.847 回答