【发布时间】:2015-05-21 08:09:47
【问题描述】:
我有一个带有 AfxBeginThread() 的程序,它需要将 postmessage 发送到主对话框以更改 listcontrol 数据。
我如何实现这一点,因为我需要传递我想要更改的文本和元素更改文本?我该怎么做?
【问题讨论】:
-
AfxBeginThread 的第一个重载有一个
pParam参数。这就是您将所有信息传递给它需要的线程的方式,例如对话框的窗口句柄。除非您提供处理所有权的自定义实现,否则您不能使用PostMessage传输免费存储数据。改用SendMessage,返回时清理资源。 -
我需要传递主 dlg 的 hwnd 和指向 dlg 的指针(因为我不知道是否可以从 hanlde 获得指向 dlg 的指针)。另外,我应该将什么传递给 WPARAM 和 LPARAM 中的 sendmessage(主要 dlg 句柄和消息类型除外)?
-
pParam的类型为void*。你可以传递你想要的任何结构,它可以是任意复杂的。尽管您可能永远不需要指向CDialog派生对象的指针,但该结构也可以包含指向该对象的指针。SendMessage的参数是特定于消息的,并与相应的消息一起记录。在转到 MFC 之前彻底学习 Windows API 可能是一个非常好的主意。即使您非常熟悉 Windows API,它也具有足够的挑战性。 -
好的,谢谢。我已经通过结构传递了我所有的论点。但仍然有一个小问题。我在消息映射 afx_msg LRESULT UpdateItemData(WPARAM wParam, LPARAM lParam);它必须更改列表控件中的一些值。但是我可以添加其他参数吗?或者我的线程必须如何与主对话框通信?
-
你真的,真的需要先学习 Windows API。如果不这样做,您将没有一点机会了解 MFC 应用程序中的代码流。您所有的消息处理程序都隐藏在预处理器宏后面,几乎无法理解发生了什么。也就是说,您通常不会直接调用消息处理程序。您宁愿发送消息并让框架调用它们作为响应。
标签: multithreading user-interface winapi mfc afx