在线程中改变控件,最好的方式是给窗体发送消息。这里所涉及到用户自定义消息的机制 。如何自定义消息,具体细节请查看相关书籍或者google。
下面实现一个在线程中改变窗体中 静态文本框内容的功能。
代码为证:
// TestOpencv2Dlg.h : 头文件
#define WM_EDITINFO WM_USER+100 //用户自定义消息
afx_msg LRESULT InfoChange(WPARAM wParam,LPARAM lParam); //声明消息相应函数
// TestOpencv2Dlg.cpp : 实现文件
BEGIN_MESSAGE_MAP(CTestOpencv2Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CTestOpencv2Dlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CTestOpencv2Dlg::OnBnClickedButton2)
ON_STN_CLICKED(IDC_PIC1, &CTestOpencv2Dlg::OnStnClickedPic1)
ON_BN_CLICKED(IDC_BUTTON3, &CTestOpencv2Dlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CTestOpencv2Dlg::OnBnClickedButton4)
ON_COMMAND(ID_32771, &CTestOpencv2Dlg::On32771)
ON_BN_CLICKED(IDCANCEL, &CTestOpencv2Dlg::OnBnClickedCancel)
ON_COMMAND(ID_32772, &CTestOpencv2Dlg::On32772)
ON_MESSAGE(WM_EDITINFO,InfoChange) //消息映射
END_MESSAGE_MAP()
//线程主函数
UINT CTestOpencv2Dlg::ThreadMain(LPVOID pParam)
{
CString strPara = _T("wohao"); //要传递的字符串
::SendMessageA(::AfxGetMainWnd()->m_hWnd,WM_EDITINFO,0,(LPARAM)(LPCTSTR)strPara); //发送消息函数,其中传递一个字符串参数
}
//消息响应函数,实现改变窗口中静态文本框的功能
LRESULT CTestOpencv2Dlg::InfoChange(WPARAM wParam,LPARAM lParam)
{
CString temStr= (LPCTSTR)lParam;
this->SetDlgItemTextA(IDC_STATIC,temStr);
return true;
}