Visual – MFC – Spin Control – AutoBuddy, Set Buddy Integer, OnInitDialog – C++

Publicado: 22 de março de 2014 em C/C++

Spin Control

É um controle de rotação, onde os usuários podem clicar em botões de seta para alterar gradualmente o valor dentro de sua caixa de texto numérico . A caixa de rotação refere-se à combinação de uma caixa de texto e seu controle de rotação associado.

O Spin Control é um controle que deve ser associado a um Edit Control através da propriedade AutoBuddy e é necessário  que os controles estejam alinhados e sejam colocados no dialogo na ordem de associação.

OnInitDialog

Este método é chamado em resposta à mensagem WM_INITDIALOG e o utilizamos quando precisamos inicializar componentes.

Uso do Spin Control

  • Geralmente o Spin Control é usado para entrada de dados numéricos.
  • Use Spin Controls quando se sabe exatamente os valores numéricos de escolha.
  • O Spin Control não deve ser usado sozinho ou com outro tipo de controle a não ser um Text Control.

Design

Desenhe um dialogo e insira os componentes na mesma ordem dispostos como imagem abaixo :

spincontrolVisual Studio

  1. Crie um projeto MFC Application Dialog Based chamado SpinControl.
  2. Coloque os componentes no dialogo e use a imagem acima para referencia.
  3. Adicione dois Static Text, dois Text Control, um Spin Control e um Button.
  4. Crie uma variável para o primeiro Edit Control chamada m_edit e para o segundo Edit Control crie uma variável chamada m_textoSpin.
  5. Crie uma variável para o Spin Control chamada m_spin.
  6. No Spin Control modifique suas propriedades: Alignment = Right Align, Auto Buddy = True e Set Buddy Integer = True.
  7. Crie um evento BN_CLICKED para o botão.
  8. Use o código abaixo para completar o código gerado automaticamente.

Exemplo:

Neste exemplo usamos um Spin Control e o associamos a um Text Control e inicializamos o SpinControl no dialogo OnInitDialog, parametrizando um valor mínimo e um valor máximo para o controle.

C#

// Código gerado Automaticamente

#include "stdafx.h"
#include "SpinControl.h"
#include "SpinControlDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

CSpinControlDlg::CSpinControlDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CSpinControlDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSpinControlDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_SPIN1, m_spin);
	DDX_Control(pDX, IDC_EDIT2, m_edit);
	DDX_Control(pDX, IDC_EDIT1, m_textoSpin);
}

BEGIN_MESSAGE_MAP(CSpinControlDlg, CDialogEx)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, &CSpinControlDlg::OnBnClickedButton1)
END_MESSAGE_MAP()

BOOL CSpinControlDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	SetIcon(m_hIcon, TRUE);
	SetIcon(m_hIcon, FALSE);

	//  ****************************
	//  *                          *
	//  *  Desenvolvimento Aberto  *
	//  *  Inicializa Spin Control *
	//  *                          *
	//  ****************************

	m_spin.SetRange(1,10);

	return TRUE;
}

void CSpinControlDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this);

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast(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 CSpinControlDlg::OnQueryDragIcon()
{
	return static_cast(m_hIcon);
}

//  ******************************
//  *                            *
//  *  Desenvolvimento Aberto    *
//  *  Nosso código Começa aqui. *
//  *                            *
//  ******************************

void CSpinControlDlg::OnBnClickedButton1()
{
	CString texto;
	m_textoSpin.GetWindowTextW(texto);
	m_edit.SetWindowTextW(texto);
}

Publicidade

Deixe um comentário

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

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. 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