Progress Control
Fornece a funcionalidade do controle de barra de progresso comum do Windows. O Progress Control é um componente da classe CProgressCtrl e quando instanciado utiliza sua própria thread para redesenhar o controle de posição da barra de progresso, o tornando assim, um componente muito fácil de ser utilizado, dispensando o uso de um temporizador e uma nova thread para o efeito de progressão da tarefa.
Visual Studio
Para utilizar o componente Progress Control siga os seguintes passos:
- Crie um programa C++ MFC Dialog Based.
- Coloque no dialogo um Static Text, um Progress Control e um Button.
- Crie uma variável para o componente Progress Control chamada m_progresso.
- Modele seu design como na figura abaixo:
- Crie um evento de clique para o botão.
- Complete seu código gerado automaticamente com o trecho marcado do código abaixo:
Exemplo:
Neste exemplo criamos uma barra de progresso e incrementamos seu valor para efeito de uma progressão de uma tarefa.
// Código gerado automaticamente // progressbarcppDlg.cpp : implementation file // #include "stdafx.h" #include "progressbarcpp.h" #include "progressbarcppDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif CprogressbarcppDlg::CprogressbarcppDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CprogressbarcppDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CprogressbarcppDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_PROGRESS1, m_progresso); } BEGIN_MESSAGE_MAP(CprogressbarcppDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, &CprogressbarcppDlg::OnBnClickedButton1) END_MESSAGE_MAP() BOOL CprogressbarcppDlg::OnInitDialog() { CDialogEx::OnInitDialog(); SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); return TRUE; } void CprogressbarcppDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } HCURSOR CprogressbarcppDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } // Desenvolvimento Aberto // nosso código começa aqui void CprogressbarcppDlg::OnBnClickedButton1() { // Zera a barra de progresso m_progresso.SetPos(0); // Adiciona limites de valores m_progresso.SetRange(0, 100); // Adiciona valor de incremento m_progresso.SetStep(1); // Incrementa barra de progresso for (int andamento = 0; andamento <= 100; andamento++) { m_progresso.SetPos(andamento); } }