我定义了一个线程函数:
static DWORD WINAPI SplitThread(LPVOID lpparam);
有一个文本框,ID为: IDC_INFODWORD WINAPI CSplitDlg::SplitThread(LPVOID lpparam)
{
CString Str="要输出的结果."; //我要在这个线程函数里把Str的值赋给文件框 IDC_INFO ,我要怎样实现呀.我用了GetDlgItem(IDC_INFO)->GetWindowText(Str,100);或者SetDlgItemText(IDC_INFO,Str);或者 UpdateData(False);这些方法,都出错.请问有什么办法解决这个问题?}
static DWORD WINAPI SplitThread(LPVOID lpparam);
有一个文本框,ID为: IDC_INFODWORD WINAPI CSplitDlg::SplitThread(LPVOID lpparam)
{
CString Str="要输出的结果."; //我要在这个线程函数里把Str的值赋给文件框 IDC_INFO ,我要怎样实现呀.我用了GetDlgItem(IDC_INFO)->GetWindowText(Str,100);或者SetDlgItemText(IDC_INFO,Str);或者 UpdateData(False);这些方法,都出错.请问有什么办法解决这个问题?}
error C2352: 'CWnd::SetDlgItemTextA' : illegal call of non-static member function
d:\program files\microsoft visual studio\vc98\mfc\include\afxwin.h(2156) : see declaration of 'SetDlgItemTextA'
它说非法的非静态函数调用.因为线程函数是对话框的成员函数,所以设置成static类型的.
如果,线程是用API函数CreateThread()创建的.那么使用CWnd里的方法非常容易出错,M$也建议你使用AfxBeginThread,记住:AfxBeginThread不仅仅是CreateThread函数的简单封装,还做了不少工作和mfc的库做了配合,其中包括mfc有好多内部全局对象的,
使用CDlgXXX *pDlg = (CDlgXXX *)lpparam; pDlg->GetDlgItem(IDC_INFO)->SetWindowText(Str);
再SendMessage