No post anterior mostramos como criar um projeto MFC para usar C++ nativo direto das APIs do Windows, portanto não vamos entrar em detalhes agora sobre como criar os eventos e o DoDataExchange dos componentes. Crie um form de acordo com o design da imagem abaixo:
Access Keys
Uma tecla de acesso é um caractere sublinhado no texto de um menu, item de menu, ou o rótulo de um controle como um botão. Ele permite o usuário “clicar” em um botão, pressionando a tecla ALT em combinação com a tecla de acesso predefinido. Por exemplo, se um botão executa um procedimento para imprimir um formulário, e, portanto, sua propriedade Text é definido como “Imprimir”, acrescentando um e comercial antes da letra “i” faz com que a letra “i”, seja sublinhada no texto do botão em tempo de execução tempo. O usuário pode executar o comando associado ao botão pressionando ALT + I. Você não pode ter uma chave de acesso para um controle que não pode receber o foco, por exemplo, um controle TabPage.
CheckBox
Representa um CheckBox do Windows
OnBnClicked
Ocorre quando o um botão recebe um click do mouse.
Visual Studio
- Abra um projeto MFC Application.
- Use a imagem acima para referencia.
- Coloque no form 1 componente Static text.
- Coloque no form 3 componentes CheckBox.
- Para todos os CheckBoxes a propriedade Caption precisa do Access Key &, exemplo: Opção 1 Alt + &X
- Coloque no form 1 componente EditControl.
- Mude as propriedade do EditControl: Multilines = True, Read Only = True, Vertical Scroll = True.
- Crie as variáveis para os CheckBox e para o EditControl.
- Crie um evento OnBnClicked para os 3 CheckBoxes.
- Use o código abaixo para completar o código gerado automaticamente.
Exemplo:
Neste exemplo mostramos como usar o componente checkbox seus eventos e como usar hotkeys para manipular o checkbox e imprimir o resultado criando um efeito do comando Append dentro de um componente EditControl Multiline.
C++
// CheckboxDlg.cpp : implementation file // #include "stdafx.h" #include "Checkbox.h" #include "CheckboxDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CCheckboxDlg dialog CCheckboxDlg::CCheckboxDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CCheckboxDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CCheckboxDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_CHECK1, opc1); DDX_Control(pDX, IDC_CHECK2, opc2); DDX_Control(pDX, IDC_CHECK3, opc3); DDX_Control(pDX, IDC_EDIT1, texto); } BEGIN_MESSAGE_MAP(CCheckboxDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_CHECK1, &CCheckboxDlg::OnBnClickedCheck1) ON_BN_CLICKED(IDC_CHECK2, &CCheckboxDlg::OnBnClickedCheck2) ON_BN_CLICKED(IDC_CHECK3, &CCheckboxDlg::OnBnClickedCheck3) END_MESSAGE_MAP() // CCheckboxDlg message handlers BOOL CCheckboxDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CCheckboxDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // Center icon in client rectangle 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; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } // The system calls this function to obtain the cursor to display while the user drags // the minimized window. HCURSOR CCheckboxDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } /** Nosso codigo começa aqui. O codigo abaixo mostra como criar o efeito da palavra chave APPEND em C++ em um EditControl Multiline. Para criar o efeito capturamos o tamanho do texto atual, criamos um ponto de selecão e trocamos a selecção pelo novo texto. **/ void CCheckboxDlg::OnBnClickedCheck1() { int tam = texto.GetWindowTextLengthW(); texto.SetSel(tam, tam); texto.ReplaceSel(L"Você clicou no Checkbox 1\n"); } void CCheckboxDlg::OnBnClickedCheck2() { int tam = texto.GetWindowTextLengthW(); texto.SetSel(tam, tam); texto.ReplaceSel(L"Você clicou no Checkbox 2\n"); } void CCheckboxDlg::OnBnClickedCheck3() { int tam = texto.GetWindowTextLengthW(); texto.SetSel(tam, tam); texto.ReplaceSel(L"Você clicou no Checkbox 3\n"); }