我正在使用MFC和C ++为Windows编写GUI应用程序。
所以我需要从我的工作线程向我的MAIN线程发送消息,告诉它更新我的GUI。但是我不确定如何将消息发送到实际的MAIN线程而不是Window。因为它是我可以看到它收到消息时在MAIN线程中,但我不确定这是保证还是运气。
在工人中:
PostMessage( *myTestToolDlg, WM_YOU_HAVE_DATA,UPDATE_GUI, 0 );
在申请窗口中:
LRESULT CTestToolDlg::OnData(WPARAM wp, LPARAM )
这是否意味着什么?
答案 0 :(得分:1)
您可以在主线程中使用threadId = GetCurrentThreadId();
之类的内容获取主线程的主题ID,然后通过调用PostThreadMessage(threadId, ...)
从中发送消息你的工作线程。
然而,正如Hans Passant所说 - > here< - ,您应该避免使用PostThreadMessage
向UI线程发送消息,并且最好将消息发送到其窗口。
答案 1 :(得分: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);