1、新建一个对话框,ID为:IDD_progressDialog,并在此对话框中添加进度条控件,ID为:IDC_PROGRESS1。通过向导为进度条关联一个控制变量:m_loadProgress
2、双击此对话框,添加CProgressContrDlg类,在CProgressContrDlg.cpp中BEGIN_MESSAGE_MAP与END_MESSAGE_MAP()之间添加ON_MESSAGE(WM_UPDATEPOS,OnMyMessage),并在StdAfx.h头文件中添加:#define WM_UPDATEPOS WM_USER + 1000
然后添加OnMyMessage实现函数(同时在此类的头文件中添加保护成员:afx_msg void OnMyMessage(WPARAM wParam,LPARAM lprama);):
void CProgressContrDlg::OnMyMessage(WPARAM wParam,LPARAM lprama)
{
int pos=(int)lprama;
m_loadProgress.SetPos(pos);
}
3、在需要打开此对话框的CXXApp类中包含#include "ProgressContrDlg.h",并定义公有成员:CProgressContrDlg *progressDlg;
在需要打开此对话框的CXXApp中添加全局的线程函数的调用语句:
progressDlg->ShowWindow(TRUE);
AfxBeginThread(ThreadFunOne,progressDlg);
progressDlg->m_loadProgress.SetRange(0,200);
在需要关闭此对话框的文件中添加:
CWnd* pRgressDlg=FindWindow(NULL,"加载进度条");
CProgressContrDlg*progress=(CProgressContrDlg*)pRgressDlg;
progress->m_loadProgress.SetPos(1000);
Sleep(1000);
::SendMessage(pRgressDlg->m_hWnd,WM_CLOSE,0,0);
线程实现函数为(同时在CXX.h头文件中添加全局线程函数的声明:UINT ThreadFunOne(LPVOID pParam);):
UINT ThreadFunOne(LPVOID pParam)
{
CProgressContrDlg *pRgressDlg=(CProgressContrDlg*)pParam;
for (int setPos=10;setPos<=1000;setPos+=10)
{
Sleep(1000);
::SendMessage(pRgressDlg->m_hWnd,WM_UPDATEPOS,0,setPos);
}
return 0;
}