放在窗体上时 可以用 CWnd *pwnd=GetDlgItem(IDC_PROGRESS2); 获取到句柄正确。
为了在ListCtrl 上加上进度条显示 ,我用 MoveWindow(); 将PROGRESS2 移动到ListCtrl 的单元格上
然后显示进度。 但是再用CWnd *pwnd=GetDlgItem(IDC_PROGRESS2); 获取句柄时 为0了
就是说在窗体上时可以获取到句柄,但进度条放在列表控件上时获取不到了
请问放在列表控件上时要怎样才能获取到呢?
6 个解决方案
#1
PROGRESS2 的父窗口是ListCtrl 吧?
应该用CWnd *pwnd=pListCtrl->GetDlgItem(IDC_PROGRESS2);
应该用CWnd *pwnd=pListCtrl->GetDlgItem(IDC_PROGRESS2);
#2
进度条是在那里产生的,父窗口是谁
#3
进度条是控件直接放在窗体上,需要时移动到listctrl项上
#4
我在新的线程里 new了一个进度条 为什么调用里面 的成员函数老是报错啊。郁闷死了
代码如下
创建线程时传入了一个结构体指针
struct NETDATA
{
CString url;
CString SaveName;
CGradientProgressCtrl *pProg;
CListCtrlCl *pList;
};
NETDATA nData;
void CDownDlg::OnBUTTONDownPdf()
{
CListCtrlCl *pList = (CListCtrlCl *)GetDlgItem(IDC_LIST1);
CString pdfUrl=pList->GetItemText(0,5); //读取报文参考头
//CWnd *pwnd=GetDlgItem(IDC_PROGRESS2);
CGradientProgressCtrl* pProg = (CGradientProgressCtrl*)GetDlgItem(IDC_PROGRESS2);//指向静态控件
nData.url=pdfUrl;
nData.SaveName="a.pdf";
nData.pProg=pProg;
nData.pList=pList;
CWinThread* pThread = AfxBeginThread(DownloadPdf,&nData,THREAD_PRIORITY_NORMAL);
}
UINT DownloadPdf(LPVOID pParam)
{
CRect ref;
NETDATA *nData=(NETDATA*)pParam;
CString url=nData->url;
CString SaveName=nData->SaveName;
CGradientProgressCtrl *m_Prog=nData->pProg; //用这个指针可以调用
CGradientProgressCtrl *m_Proga=new CGradientProgressCtrl();
CListCtrlCl *pList=(CListCtrlCl*)(AfxGetMainWnd()->GetDlgItem(IDC_LIST1));
pList->GetSubItemRect(0,0,LVIR_LABEL,ref); //获取单元格的坐标
ref.left-=2;
//当用传进来的m_Prog调用就可以,用new出来的指针调用都报错,是怎么回事
m_Proga->SetParent(pList);//改为m_Prog->SetParent(pList); 就可以 下面的语句也是一样
m_Proga->MoveWindow(ref);//移动进度条控件到该项 位置
m_Proga->ShowWindow(SW_SHOW);
m_Proga->SetPos(1);
}
代码如下
创建线程时传入了一个结构体指针
struct NETDATA
{
CString url;
CString SaveName;
CGradientProgressCtrl *pProg;
CListCtrlCl *pList;
};
NETDATA nData;
void CDownDlg::OnBUTTONDownPdf()
{
CListCtrlCl *pList = (CListCtrlCl *)GetDlgItem(IDC_LIST1);
CString pdfUrl=pList->GetItemText(0,5); //读取报文参考头
//CWnd *pwnd=GetDlgItem(IDC_PROGRESS2);
CGradientProgressCtrl* pProg = (CGradientProgressCtrl*)GetDlgItem(IDC_PROGRESS2);//指向静态控件
nData.url=pdfUrl;
nData.SaveName="a.pdf";
nData.pProg=pProg;
nData.pList=pList;
CWinThread* pThread = AfxBeginThread(DownloadPdf,&nData,THREAD_PRIORITY_NORMAL);
}
UINT DownloadPdf(LPVOID pParam)
{
CRect ref;
NETDATA *nData=(NETDATA*)pParam;
CString url=nData->url;
CString SaveName=nData->SaveName;
CGradientProgressCtrl *m_Prog=nData->pProg; //用这个指针可以调用
CGradientProgressCtrl *m_Proga=new CGradientProgressCtrl();
CListCtrlCl *pList=(CListCtrlCl*)(AfxGetMainWnd()->GetDlgItem(IDC_LIST1));
pList->GetSubItemRect(0,0,LVIR_LABEL,ref); //获取单元格的坐标
ref.left-=2;
//当用传进来的m_Prog调用就可以,用new出来的指针调用都报错,是怎么回事
m_Proga->SetParent(pList);//改为m_Prog->SetParent(pList); 就可以 下面的语句也是一样
m_Proga->MoveWindow(ref);//移动进度条控件到该项 位置
m_Proga->ShowWindow(SW_SHOW);
m_Proga->SetPos(1);
}
#5
进度条成孙子了吗?
#6
楼上,你new出来的进度条不用create吗?
#1
PROGRESS2 的父窗口是ListCtrl 吧?
应该用CWnd *pwnd=pListCtrl->GetDlgItem(IDC_PROGRESS2);
应该用CWnd *pwnd=pListCtrl->GetDlgItem(IDC_PROGRESS2);
#2
进度条是在那里产生的,父窗口是谁
#3
进度条是控件直接放在窗体上,需要时移动到listctrl项上
#4
我在新的线程里 new了一个进度条 为什么调用里面 的成员函数老是报错啊。郁闷死了
代码如下
创建线程时传入了一个结构体指针
struct NETDATA
{
CString url;
CString SaveName;
CGradientProgressCtrl *pProg;
CListCtrlCl *pList;
};
NETDATA nData;
void CDownDlg::OnBUTTONDownPdf()
{
CListCtrlCl *pList = (CListCtrlCl *)GetDlgItem(IDC_LIST1);
CString pdfUrl=pList->GetItemText(0,5); //读取报文参考头
//CWnd *pwnd=GetDlgItem(IDC_PROGRESS2);
CGradientProgressCtrl* pProg = (CGradientProgressCtrl*)GetDlgItem(IDC_PROGRESS2);//指向静态控件
nData.url=pdfUrl;
nData.SaveName="a.pdf";
nData.pProg=pProg;
nData.pList=pList;
CWinThread* pThread = AfxBeginThread(DownloadPdf,&nData,THREAD_PRIORITY_NORMAL);
}
UINT DownloadPdf(LPVOID pParam)
{
CRect ref;
NETDATA *nData=(NETDATA*)pParam;
CString url=nData->url;
CString SaveName=nData->SaveName;
CGradientProgressCtrl *m_Prog=nData->pProg; //用这个指针可以调用
CGradientProgressCtrl *m_Proga=new CGradientProgressCtrl();
CListCtrlCl *pList=(CListCtrlCl*)(AfxGetMainWnd()->GetDlgItem(IDC_LIST1));
pList->GetSubItemRect(0,0,LVIR_LABEL,ref); //获取单元格的坐标
ref.left-=2;
//当用传进来的m_Prog调用就可以,用new出来的指针调用都报错,是怎么回事
m_Proga->SetParent(pList);//改为m_Prog->SetParent(pList); 就可以 下面的语句也是一样
m_Proga->MoveWindow(ref);//移动进度条控件到该项 位置
m_Proga->ShowWindow(SW_SHOW);
m_Proga->SetPos(1);
}
代码如下
创建线程时传入了一个结构体指针
struct NETDATA
{
CString url;
CString SaveName;
CGradientProgressCtrl *pProg;
CListCtrlCl *pList;
};
NETDATA nData;
void CDownDlg::OnBUTTONDownPdf()
{
CListCtrlCl *pList = (CListCtrlCl *)GetDlgItem(IDC_LIST1);
CString pdfUrl=pList->GetItemText(0,5); //读取报文参考头
//CWnd *pwnd=GetDlgItem(IDC_PROGRESS2);
CGradientProgressCtrl* pProg = (CGradientProgressCtrl*)GetDlgItem(IDC_PROGRESS2);//指向静态控件
nData.url=pdfUrl;
nData.SaveName="a.pdf";
nData.pProg=pProg;
nData.pList=pList;
CWinThread* pThread = AfxBeginThread(DownloadPdf,&nData,THREAD_PRIORITY_NORMAL);
}
UINT DownloadPdf(LPVOID pParam)
{
CRect ref;
NETDATA *nData=(NETDATA*)pParam;
CString url=nData->url;
CString SaveName=nData->SaveName;
CGradientProgressCtrl *m_Prog=nData->pProg; //用这个指针可以调用
CGradientProgressCtrl *m_Proga=new CGradientProgressCtrl();
CListCtrlCl *pList=(CListCtrlCl*)(AfxGetMainWnd()->GetDlgItem(IDC_LIST1));
pList->GetSubItemRect(0,0,LVIR_LABEL,ref); //获取单元格的坐标
ref.left-=2;
//当用传进来的m_Prog调用就可以,用new出来的指针调用都报错,是怎么回事
m_Proga->SetParent(pList);//改为m_Prog->SetParent(pList); 就可以 下面的语句也是一样
m_Proga->MoveWindow(ref);//移动进度条控件到该项 位置
m_Proga->ShowWindow(SW_SHOW);
m_Proga->SetPos(1);
}
#5
进度条成孙子了吗?
#6
楼上,你new出来的进度条不用create吗?