Visual – MFC – Progress Control – CProgressCtrl – C++

Publicado: 9 de abril de 2014 em C/C++

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:

  1. Crie um programa C++ MFC Dialog Based.
  2. Coloque no dialogo um Static Text, um Progress Control e um Button.
  3. Crie uma variável para o componente Progress Control chamada m_progresso.
  4. Modele seu design como na figura abaixo:

    progresscontrol

    Progress Control – Design

  5. Crie um evento de clique para o botão.
  6. 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);
	}
}
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s