我想在List control中显示数据,但是调用UpdateData(false)时出现 “试图执行系统不支持的操作”!!!网上有人说:有百分之八十的原因是你使用了一个资源,比如一个EDIT,同时你又在类中建了一个成员,如CEdit m_editTest;但是现在你把这个EDIT删除了,而m_editTest却没有删除。你只要在ClassWizard中找到这个定义,将其删除就一切OK了。但是我看过了,并不是这种情况啊!!!代码:List control的ID是IDC_ONLINE_LISTvoid CTransfersServerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_ONLINE_LIST, m_onlineList);
}//按下按键后启用线程
void CTransfersServerDlg::OnBnClickedStartUp()
{
// TODO: 在此添加控件通知处理程序代码 GetDlgItem(IDC_ONLINE_LIST)->EnableWindow(true); /////设置列表有效
GetDlgItem(IDC_MSG_TASK)->EnableWindow(true); /////设置发送消息有效
GetDlgItem(IDC_START_UP)->EnableWindow(false); //但是,如果我在这里直接调用 ShowList("tim","kdj","tiui")又可以正常显示!!!实在太奇怪了!!!
// ShowList("tim","kdj","tiui"); HANDLE threadhandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ServerStartUp, NULL, NULL, NULL);
CloseHandle(threadhandle);
}
//线程函数
void ServerStartUp()
{
CTransfersServerDlg obj;
userNameStr = "tim";
ipStr = "222.222.222.255";
portStr = "52643";
//此处调用ShowList();
obj.ShowList(userNameStr ,ipStr ,portStr);
}void CTransfersServerDlg::ShowList(CString userNameStr ,CString ipStr ,CString portStr)
{
//
int nIndex = 0; //m_onlineList.GetItemCount();
//LV_ITEM lvitem;
//lvitem.mask = LVIF_TEXT;
//lvitem.iItem = nIndex;
//lvitem.iSubItem = 0;
////CString temp;
////temp.Format('%s\',m_value1);
//lvitem.pszText = (char*)(LPCTSTR)"1";
m_onlineList.InsertItem(nIndex,"1");
m_onlineList.SetItemText(nIndex,1,userNameStr);
m_onlineList.SetItemText(nIndex,2,ipStr);
m_onlineList.SetItemText(nIndex,3,portStr);//问题出在这里了,如果去掉UpdateData(false),程序运行后不会出现“试图执行系统不支持的操作”!!
UpdateData(false);
}
为什么是线程函数中调用本类的函数时会这样呢???
小弟第一次发贴求救,希望高手们帮帮手!!!感谢万分!!!!!
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_ONLINE_LIST, m_onlineList);
}//按下按键后启用线程
void CTransfersServerDlg::OnBnClickedStartUp()
{
// TODO: 在此添加控件通知处理程序代码 GetDlgItem(IDC_ONLINE_LIST)->EnableWindow(true); /////设置列表有效
GetDlgItem(IDC_MSG_TASK)->EnableWindow(true); /////设置发送消息有效
GetDlgItem(IDC_START_UP)->EnableWindow(false); //但是,如果我在这里直接调用 ShowList("tim","kdj","tiui")又可以正常显示!!!实在太奇怪了!!!
// ShowList("tim","kdj","tiui"); HANDLE threadhandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ServerStartUp, NULL, NULL, NULL);
CloseHandle(threadhandle);
}
//线程函数
void ServerStartUp()
{
CTransfersServerDlg obj;
userNameStr = "tim";
ipStr = "222.222.222.255";
portStr = "52643";
//此处调用ShowList();
obj.ShowList(userNameStr ,ipStr ,portStr);
}void CTransfersServerDlg::ShowList(CString userNameStr ,CString ipStr ,CString portStr)
{
//
int nIndex = 0; //m_onlineList.GetItemCount();
//LV_ITEM lvitem;
//lvitem.mask = LVIF_TEXT;
//lvitem.iItem = nIndex;
//lvitem.iSubItem = 0;
////CString temp;
////temp.Format('%s\',m_value1);
//lvitem.pszText = (char*)(LPCTSTR)"1";
m_onlineList.InsertItem(nIndex,"1");
m_onlineList.SetItemText(nIndex,1,userNameStr);
m_onlineList.SetItemText(nIndex,2,ipStr);
m_onlineList.SetItemText(nIndex,3,portStr);//问题出在这里了,如果去掉UpdateData(false),程序运行后不会出现“试图执行系统不支持的操作”!!
UpdateData(false);
}
为什么是线程函数中调用本类的函数时会这样呢???
小弟第一次发贴求救,希望高手们帮帮手!!!感谢万分!!!!!
1> 类型是“'unknown-type'”
1>.\TransfersServerDlg.cpp(257) : error C3861: “GetActiveView”: 找不到标识符出错啊,是不是要包含一个头文件或者其他???thx!!
CTransfersServerDlg obj;
obj.ShowList(userNameStr ,ipStr ,portStr);
void CTransfersServerDlg::ShowList(CString userNameStr ,CString ipStr ,CString portStr)
{
UpdateData(false);
}你说这obj什么时候创建的?瞎搞, 你这obj根本没有创建懂吗?对话框没有创建不能UpdateData。CTransfersServerDlg obj;
obj.Create(CTransfersServerDlg::IDD);//建立对话框,默认为隐藏这样就可以了
你那样做你其实建立两个不相关的对话框
void ServerStartUp(CTransfersServerDlg *pDlg)
{
userNameStr = "tim";
ipStr = "222.222.222.255";
portStr = "52643";
//此处调用ShowList();
pDlg->ShowList(userNameStr ,ipStr ,portStr);
}
另外,楼主在线程中最好把obj这个对象用this指针的方式传进去
void CTransfersServerDlg::OnBnClickedStartUp()
{
AfxBeginThread(ServerStartUp, this )
}
void ServerStartUp(LPVOID pVal)
{
CTransfersServerDlg* pDlg=( CTransfersServerDlg* )pVal;
pDlg->ShowList(userNameStr ,ipStr ,portStr);
}这样试试看吧
调用obj.Create(IDD_TRANSFERSSERVER_DIALOG);后又一次建立了原来的对话框啊!!把对话框的指针传给ServerStartUp函数??
谢谢feiyangdn和sereve!!!你们都说得对!!!!
想不到第一次发贴问题就马上解决!!!
再一次谢谢你们!!!