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