创建滚动进度条的几种方法
2016-03-07 08:09
525 查看
方法一:不创建新的进程
1、拖一个progress control控件在对话框上,将该控件的Marquee属性设为True。在添加两个Button控件。如下图所示:
2、给控件添加个变量m_progress,再添加int 型的变量m_nCount.
3、启动定时器:SetTimer(1,10,NULL)。
4、添加消息处理函数。
在对话框属性栏中,点击属性,添加WM_TIMER消息函数,如下图所示:
void CProgressDlg ::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_Progress.SetPos(m_nCount);
/*if (4 == m_nCount)
{
m_nCount = 1;
}
else
{
m_nCount ++;
}*/
CDialogEx::OnTimer(nIDEvent );
}
5、销毁定时器,KillTimer()。
给结束按钮添加事件。
方法二:创建工作者线程。
创建工作者线程的步骤:
(1),先编写一个与应用程序的其余部分并行运行的函数Fun1()。
(2),定义一个指向CWinThread对象的指针变量*pThread。
(3),调用AfxBeginThread(Fun1,pParam,Priority)函数。
(4),函数返回值赋给pThread变量,同时一并启动Fun1函数。
效果图:
1、先添加好相应的控件Progress Control和Static Text控件,再添加相应控件的变量m_MyProcess 和m_MyStatic。
2、编写函数Fun1:
3、调用AfxBeginThread(Fun1,pParam,Priority)函数。
方法三:创建用户界面线程
创建用户界面线程步骤:
(1)从CWinThread类派生一个类,并用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE来声明和实现这个派生类,重载该派生类的成员函数InitInstance()和ExitInstance().
(2)插入一个对话框资源,在对话框中添加进度条控件并添加该控件的变量,然后创建该对话框类。
(3)在第一步中派生的类中的成员函数InitInstance()进行初始化要创建对象的线程实例。
(4)调用AfxBeginThread函数。
点击图一的开始按钮,弹出图二对话框,一个进度条在走。效果图:
1、CWinThread类派生一个类MyThreadPS,在类视图中,右击打开类向导界面,点击添加类的下拉箭头,选择MFC类,给类取个名字,基类选择CWinThread。其中用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE来声明和实现的这个过程是自动实现的。
2、插入对话框资源。在插入的对话框右击添加类和添加变量。
3、给插入的对话框添加Progress Control控件。
4、在类MyThreadPS的成员函数InitInstance()进行初始化。(m_Dlg是MyUIThread类对象。)
5、添加WM_TIMER消息函数
6、调用AfxBeginThread函数,在主界面的按钮添加一下代码:
void CMyThreadDlg ::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CWinThread *pThread = AfxBeginThread(RUNTIME_CLASS (MyThreadPS));
}
[align=left]
[/align]
1、拖一个progress control控件在对话框上,将该控件的Marquee属性设为True。在添加两个Button控件。如下图所示:
2、给控件添加个变量m_progress,再添加int 型的变量m_nCount.
3、启动定时器:SetTimer(1,10,NULL)。
<pre class="cpp" name="code">void CProgressDlg ::OnBnClickedButtonStart() { // TODO: 在此添加控件通知处理程序代码 SetTimer(1,10, NULL); }
4、添加消息处理函数。
在对话框属性栏中,点击属性,添加WM_TIMER消息函数,如下图所示:
void CProgressDlg ::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_Progress.SetPos(m_nCount);
/*if (4 == m_nCount)
{
m_nCount = 1;
}
else
{
m_nCount ++;
}*/
CDialogEx::OnTimer(nIDEvent );
}
5、销毁定时器,KillTimer()。
给结束按钮添加事件。
void CProgressDlg ::OnBnClickedButtonEnd() { // TODO: 在此添加控件通知处理程序代码 KillTimer(1); }
方法二:创建工作者线程。
创建工作者线程的步骤:
(1),先编写一个与应用程序的其余部分并行运行的函数Fun1()。
(2),定义一个指向CWinThread对象的指针变量*pThread。
(3),调用AfxBeginThread(Fun1,pParam,Priority)函数。
(4),函数返回值赋给pThread变量,同时一并启动Fun1函数。
效果图:
1、先添加好相应的控件Progress Control和Static Text控件,再添加相应控件的变量m_MyProcess 和m_MyStatic。
2、编写函数Fun1:
UINT MyThread(LPVOID pParam) { CMyThreadDlg *pDlg = (CMyThreadDlg *)pParam; CProgressCtrl *pPro = &pDlg->m_MyProcess; for (int i = 1; i <=100; ++i) { i++; pPro->SetPos(i); CString s; s.Format( _T("%d%%" ), i); pDlg->m_MyStatic.SetWindowTextW(s); Sleep(100); } return 0; }
3、调用AfxBeginThread(Fun1,pParam,Priority)函数。
void CMyThreadDlg ::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 AfxBeginThread(MyThread, ( LPVOID)this ); //CDialogEx::OnOK(); }
方法三:创建用户界面线程
创建用户界面线程步骤:
(1)从CWinThread类派生一个类,并用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE来声明和实现这个派生类,重载该派生类的成员函数InitInstance()和ExitInstance().
(2)插入一个对话框资源,在对话框中添加进度条控件并添加该控件的变量,然后创建该对话框类。
(3)在第一步中派生的类中的成员函数InitInstance()进行初始化要创建对象的线程实例。
(4)调用AfxBeginThread函数。
点击图一的开始按钮,弹出图二对话框,一个进度条在走。效果图:
1、CWinThread类派生一个类MyThreadPS,在类视图中,右击打开类向导界面,点击添加类的下拉箭头,选择MFC类,给类取个名字,基类选择CWinThread。其中用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE来声明和实现的这个过程是自动实现的。
2、插入对话框资源。在插入的对话框右击添加类和添加变量。
3、给插入的对话框添加Progress Control控件。
4、在类MyThreadPS的成员函数InitInstance()进行初始化。(m_Dlg是MyUIThread类对象。)
BOOL MyThreadPS ::InitInstance() { // TODO: 在此执行任意逐线程初始化 m_Dlg.Create( IDD_DIALOG1); m_Dlg.ShowWindow( SW_SHOW); m_pMainWnd = &m_Dlg; SetTimer(GetActiveWindow(), 1, 10, NULL);//启动定时器 return TRUE ; } int MyThreadPS ::ExitInstance() { // TODO: 在此执行任意逐线程清理 m_Dlg.DestroyWindow(); return CWinThread ::ExitInstance(); }
5、添加WM_TIMER消息函数
voidMyUIThread::OnTimer(UINT_PTRnIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 m_MyPro.SetPos(m_nCount); CDialogEx::OnTimer(nIDEvent ); }
6、调用AfxBeginThread函数,在主界面的按钮添加一下代码:
void CMyThreadDlg ::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CWinThread *pThread = AfxBeginThread(RUNTIME_CLASS (MyThreadPS));
}
[align=left]
[/align]
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- jquery彩色投票进度条简单实例演示
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#6.0中10大新特性的应用和总结
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例