在线程中改变控件,最好的方式是给窗体发送消息。这里所涉及到用户自定义消息的机制 。如何自定义消息,具体细节请查看相关书籍或者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; }