MFC 之进度条CProgressCtrl

    xiaoxiao2021-03-25  114

    一、成员函数简介 

    1、create()

    针对不是通过资源文件上拖拉进度条控件生成的进度条,需要用此函数创建一个。

    2、SetRange()

    设置进度条的起始值和终止值。

    3、SetPos()

    设置进度条的当前位置。

    4、OffSetPos()

    移动进度条一段距离

    5、SetStep()

    设置步长

    6、StepIt()

    按照步长来更新位置

    二、例子

    例1:在资源窗口手动增加一个控件IDC_PROGRESS1

    CProgressCtrl *myProCtrl2 = (CProgressCtrl *)GetDlgItem(IDC_PROGRESS1); myProCtrl2->SetRange(0,100); for (int i = 0;i<100;i++) { //myProCtrl2->OffsetPos(1);       //此句代码等同于下两句,以固定步长1更新显示,该功能也可以这样实现:myProCtrl2->SetPos(i);  myProCtrl2->SetStep(1); myProCtrl2->StepIt(); Sleep(100); }

    进阶

    这样就满足了,当然不行。为了避免在Button按钮中,执行任务长时间从而导致的界面无响应。 在本节中我们使用多线程的方式控制进度条。

    CThread类 【我是干(ku)活(bi)的】

    // Thread.h #pragma once #include <process.h> #include <Windows.h> #define WM_USER_MSG WM_USER + 1001 class CThread { public: // 线程回调函数必须是全局函数 static void Run(void *ptr); public: CThread(void); ~CThread(void); }; // Thread.cpp #include "StdAfx.h" #include "Thread.h" void CThread::Run( void *ptr ) { HWND hWnd = (HWND)ptr; for (int i=0;i<100;++i) { ::PostMessage(hWnd,WM_USER_MSG,WPARAM(i),LPARAM(0)); Sleep(100); } AfxMessageBox("完成"); ::PostMessage(hWnd,WM_USER_MSG,WPARAM(0),LPARAM(0)); _endthread(); } CThread::CThread(void) { } CThread::~CThread(void) { } 123456789101112131415161718192021222324252627282930313233343536373839

    对话框类【我是用来显(xian)示(bai)的】

    // 消息映射 ON_MESSAGE(WM_USER_MSG, &CThreadProgDlg::OnMsg) // OnInitDialog CProgressCtrl *prog = (CProgressCtrl *)GetDlgItem(IDC_PROGRESS1); prog->SetRange(0,100); // 消息响应 void CThreadProgDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 _beginthread(&CThread::Run,0,this->GetSafeHwnd()); //CDialogEx::OnOK(); } LRESULT CThreadProgDlg::OnMsg( WPARAM wp,LPARAM lp ) { CProgressCtrl *prog = (CProgressCtrl *)GetDlgItem(IDC_PROGRESS1); prog->SetPos((int)wp); return 1L; } 12345678910111213141516171819

    参考资料:  [1].MFC+多线程+对话框+进度条  http://blog.sina.com.cn/s/blog_4a4839570102v5ba.html  [2].MFC之进度条CProgressCtrl  http://www.cnblogs.com/huhu0013/p/4434031.html  [3].MfC 进度条控件  http://blog.csdn.net/dongpanshan/article/details/8453291  [4].MFC控件介绍之Progress Control(进度条)  http://www.zhixing123.cn/net/mfc-progress-control.html  [5].MFC编程实例二:进度条的使用  http://guiwenyong.blog.163.com/blog/static/16728964020112229417991  [6].MFC进度条编程控制  http://blog.csdn.net/feidegengao/article/details/8296573  [7].MFC 如何改变进度条的颜色  http://blog.163.com/wenxianliang08@126/blog/static/83583263201412710599488  [8].MFC新线程控制进度条【推荐】  http://www.cnblogs.com/greatverve/archive/2012/12/21/mfc-thread-CProgressCtrl.html  [9].MFC多线程控制进度条  http://blog.csdn.net/bizhu12/article/details/6788241  [10].两种线程方式实现进度条【推荐】  http://blog.csdn.net/csf111/article/details/7009908  [11].MFC多线程的进度条设计【推荐】  http://blog.csdn.net/ztz0223/article/details/9039633

    转载请注明原文地址: https://ju.6miu.com/read-24299.html

    最新回复(0)