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 :
-
Crie um projeto MFC Application Dialog Based chamado SpinControl.
-
Coloque os componentes no dialogo e use a imagem acima para referencia.
-
Adicione dois Static Text, dois Text Control, um Spin Control e um Button.
-
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.
-
Crie uma variável para o Spin Control chamada m_spin.
- No Spin Control modifique suas propriedades: Alignment = Right Align, Auto Buddy = True e Set Buddy Integer = True.
-
Crie um evento BN_CLICKED para o botão.
-
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);
}


