我正在使用MFC和C++为Windows编写一个图形用户界面应用程序。
所以我需要从我的工作线程向我的主线程发送消息,告诉它更新我的GUI。但是,我不确定如何将消息发送到实际的主线程,而不是窗口。当它收到消息时,我可以看到它在主线程中,但我不确定这是有保证的还是只是运气好。
在worker中:
PostMessage( *myTestToolDlg, WM_YOU_HAVE_DATA,UPDATE_GUI, 0 );
在应用程序窗口中:
LRESULT CTestToolDlg::OnData(WPARAM wp, LPARAM )
这是不是意味着什么呢?
发布于 2013-08-16 10:51:13
您可以通过在主线程中使用类似于threadId = GetCurrentThreadId();
的内容来获取主线程的线程id,然后通过从工作线程调用PostThreadMessage(threadId, ...)
向其发送一条消息。
然而,正如Hans Passant所说的-> here <-,您应该避免使用PostThreadMessage
向UI线程发送消息,并且最好将消息发送到它的窗口。
发布于 2020-07-09 09:27:17
如果要直接修改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);
https://stackoverflow.com/questions/18271229
复制