在 MFC 中,可以使用 PostMessage 函数将消息发送给窗口的消息队列。以下是使用 PostMessage 在线程之间发送消息的步骤和示例代码:

  1. 定义自定义消息:
// MyMFCWindow.h
class CMyMFCWindow : public CWnd
{
public:
    afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
    // ...
};

// MyMFCWindow.cpp
BEGIN_MESSAGE_MAP(CMyMFCWindow, CWnd)
    ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
    // ...
END_MESSAGE_MAP()

LRESULT CMyMFCWindow::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
    // 在这里处理消息
    // ...
    return 0;
}
  1. 创建线程:
UINT MyThreadFunction(LPVOID pParam)
{
    CMyMFCWindow* pWnd = (CMyMFCWindow*)pParam;
    
    // 发送消息
    pWnd->PostMessage(WM_MY_MESSAGE, wParam, lParam);
    
    return 0;
}
  1. 在 MFC 窗口类中创建线程并调用线程函数:
// MyMFCWindow.cpp
void CMyMFCWindow::SomeFunction()
{
    // 创建线程
    AfxBeginThread(MyThreadFunction, this);
}

在上述代码中:

  • WM_MY_MESSAGE 是自定义的消息 ID。
  • OnMyMessage 是用来处理自定义消息的函数。
  • MyThreadFunction 是线程函数,它接收指向 MFC 窗口对象的指针 pWnd,并使用 PostMessage 发送消息。
  • SomeFunction 是 MFC 窗口类中的一个函数,它负责创建线程并调用线程函数。

注意事项:

  • 确保线程函数中的 pWnd 指针有效。在创建线程时将 this 指针传递给线程函数,可以确保 pWnd 指向正确的窗口对象。
  • 使用 PostMessage 发送消息可以确保消息被安全地加入到窗口的消息队列中,并在窗口的空闲时间被处理。
  • 在使用 PostMessage 发送消息时,请注意消息参数的类型和意义。
  • 如果需要更复杂的线程间通信,可以使用其他方法,例如事件对象或信号量。

希望这些信息对您有所帮助。如果您还有其他问题,请随时提问。

MFC 窗口线程间通信:使用 PostMessage 发送消息

原文地址: https://www.cveoy.top/t/topic/qECF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录