2023/9/27 多线程,自定义一个消息,绑定函数

	ON_MESSAGE(WM_SHOW_INFO, &CZAZDemoDlg::OnShowInfo)

自定义一个消息响应#define WM_SHOW_INFO WM_USER + 130

定义一个静态的线程 UINT GenImg(LPVOID pParam);

在线性的函数中,不能直接调用指向对话框的指针来调用函数

所以在这里需要传递一个消息,使用PostMessage()函数

#define PostMessage  PostMessageA

PostMessageA(
    _In_opt_ HWND hWnd,
    _In_ UINT Msg,
    _In_ WPARAM wParam,
    _In_ LPARAM lParam);

在这里,我们使用了PostMessage而不是SendMessage,因为PostMessage是异步的,不会等待接收方处理消息就立即返回

这对于避免阻塞线程是非常重要的。

获取句柄 HWND hWnd = (HWND)pParam; // 将pParam转换为句柄类型

	CString strInfo = "   ";
    PostMessage((HWND)pParam, WM_SHOW_INFO, 0, (LPARAM)strInfo.GetBuffer());
    //第一个就是句柄,第二个是消息,第四个是传递的消息
    strInfo.ReleaseBuffer();//最后要释放

不能使用sendmessage,然后就能在你所绑定的OnshowInfo函数中接收变量了

在对话框类中声明和实现消息处理函数

afx_msg LRESULT OnShowInfo(WPARAM wParam, LPARAM lParam);

然后,在消息映射中添加对自定义消息的支持:

BEGIN_MESSAGE_MAP(CYourDialog, CDialogEx)
    ON_MESSAGE(WM_SHOW_INFO, &CYourDialog::OnShowInfo)
END_MESSAGE_MAP()

 

LRESULT CYourDialog::OnShowInfo(WPARAM wParam, LPARAM lParam)
{
    CString strInfo = (LPCTSTR)lParam;

    // 更新UI控件显示信息
    SetDlgItemText(IDC_STATIC_INFO, strInfo);

    return 0;
}

启动线程

AfxBeginThread(GenImg, m_hWnd);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值