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


