线程中SetDlgItemText的一个小问题。高手帮帮忙。

jczff 2007-05-10 10:27:15
这是我的一个线程:UINT CFileTransferClientView::ThreadedGetFileFromRemoteSender(LPVOID pVoid)
{
CFileTransferClientView* pThis = (CFileTransferClientView*)pVoid;
AfxSocketInit(NULL); // make certain this is done somewhere in each thread (usually in InitInstance for main thread)
CSocket sockClient;
sockClient.Create();
sockClient.Connect( pThis->m_strTargetIP, PRE_AGREED_PORT ); // PRE_AGREED_PORT is #define'd as 8686
int dataLength, cbBytesRet, cbLeftToReceive; // used to monitor the progress of a receive operation
BYTE* recdData = NULL; // pointer to buffer for receiving data (memory is allocated after obtaining file size)
int pbInterval = 0; int curPB = 0; // progress bar variables
CFile destFile;
CFileException fe;
BOOL bFileIsOpen = FALSE;
cbLeftToReceive = sizeof( dataLength );
do
{
BYTE* bp = (BYTE*)(&dataLength) + sizeof(dataLength) - cbLeftToReceive;
cbBytesRet = sockClient.Receive( bp, cbLeftToReceive - simulate );
SetDlgItemText(IDC_EDIT1,"do");
}
while ( cbLeftToReceive > 0 );
return 0;
}
当我用到这一句SetDlgItemText(IDC_EDIT1,"do");
时,会出现
F:\FileTransferClientView.cpp(558) : 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'
搞不懂怎么会这样。
那我想实时修改文本框里面的内容,该怎么办呢
...全文
676 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jczff 2007-05-10
  • 打赏
  • 举报
回复
谢谢你们
wltg2001 2007-05-10
  • 打赏
  • 举报
回复
线程函数是成员函数,这个函数你一定设为静态了,而静态成员函数不能引用非静态成员.
hjon 2007-05-10
  • 打赏
  • 举报
回复
晕,一楼的比我快了两秒.

线程函数本身是静态的,或者是一个全局函数,

当线程函数是一个类的静态成员形式时,这个函数只能访问静态的成员或者成员函数,
或者你直接用一个指针来告诉函数的地址,就像用pThis来调用一样
hjon 2007-05-10
  • 打赏
  • 举报
回复
你应该用pThis->SetDlgItemText()这种形式来调用.
ouyh12345 2007-05-10
  • 打赏
  • 举报
回复
pThis->SetDlgItemText(IDC_EDIT1,"do");

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧