GetDlgItem(IDC_PROGRESS2);获取控件句柄出错

时间:2022-08-28 05:48:54
PROGRESS2是一个进度条的id
放在窗体上时 可以用 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); 

#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);
}

#5


进度条成孙子了吗?

#6


楼上,你new出来的进度条不用create吗?

#1


PROGRESS2 的父窗口是ListCtrl 吧?
应该用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);
}

#5


进度条成孙子了吗?

#6


楼上,你new出来的进度条不用create吗?