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);