Uma caixa de texto, campo de texto ou caixa de entrada de texto é uma espécie de ferramenta utilizada na construção de uma interface gráfica de usuário (GUI). A finalidade de um caixa de texto é o de permitir ao utilizador inserir informações de texto de entrada a ser utilizado pelo programa. Diretrizes de interface do usuário recomendam uma caixa com uma única linha de texto quando é necessária apenas uma linha de entrada, e uma caixa de texto de várias linhas somente se for necessária mais de uma linha de entrada. Caixas de texto não editáveis pode servir ao propósito de simplesmente exibir texto.
Edit Control – Multiline
Este tipo de controle foi projetados para inserir, exibir e editar pequenas quantidades de texto. Eles não foram feitos para ser a base para editores de texto de grande escala e possuem limites.
Controles de edição de várias linhas são limitados a um máximo de 64K (65.535 bytes) de texto. Técnicas para controlar a forma como os controles de edição usam memória são necessárias. Controles de edição de várias linhas também estão limitadas ao seguinte: caracteres por linha de texto, linhas de texto e pixels por linha de texto.
O Edit Control é um componente que armazena seu texto em um buffer e o seu conteúdo pode ser manipulado diretamente, por isto não possui as propriedades Append, WordWrap entre outras, para aprender como manipular o Edit Control diretamente use o link abaixo:
Edit Controls : http://msdn.microsoft.com/en-us/library/ms997530.aspx
Visual Studio.
Para usar o Edit Control para manipular textos siga os seguintes passos:
- Crie um novo projeto MFC – C++ – Dialog Based.
- Coloque no dialogo um Static Text, dois Edit Controls e um Button, use a imagem abaixo para o design da tela:
- Mude a propriedade do primeiro Edit_Control para Multilines = True e Vertical Scroll = True.
- Crie uma variável m_area para o primeiro Edit Control e uma variável m_texto para o segundo Edit Control.
- Crie um evento BN_CLICKED para o botão
- Preencha o seu código com os trechos marcados do código abaixo.
Exemplo:
Neste exemplo criamos um programa com uma área de texto onde se pode editar diretamente o texto ou inserir linhas no texto através de uma caixa de texto simples e um botão.
// Código gerado automaticamente // TextBoxcppDlg.cpp : implementation file // #include "stdafx.h" #include "TextBoxcpp.h" #include "TextBoxcppDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif CTextBoxcppDlg::CTextBoxcppDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CTextBoxcppDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CTextBoxcppDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT2, m_texto); DDX_Control(pDX, IDC_EDIT3, m_area); } BEGIN_MESSAGE_MAP(CTextBoxcppDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, &CTextBoxcppDlg::OnBnClickedButton1) END_MESSAGE_MAP() BOOL CTextBoxcppDlg::OnInitDialog() { CDialogEx::OnInitDialog(); SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); // Desenvolvimento Aberto // inicializa area de texto int tam1 = m_area.GetWindowTextLengthW(); m_area.SetSel(tam1, tam1); m_area.ReplaceSel(L"Escreva um texto dentro da caixa de texto\n"); int tam2 = m_area.GetWindowTextLengthW(); m_area.SetSel(tam2, tam2); m_area.ReplaceSel(L"Você também pode adicionar novas linhas nesta caixa\n"); int tam3 = m_area.GetWindowTextLengthW(); m_area.SetSel(tam3, tam3); m_area.ReplaceSel(L"Escrevendo no editor e clicando no botão\n"); return TRUE; } void CTextBoxcppDlg::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 CTextBoxcppDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } // Desenvolvimento Aberto // Evento do botão void CTextBoxcppDlg::OnBnClickedButton1() { CString novotxt; m_texto.GetWindowTextW(novotxt); int tam = m_area.GetWindowTextLengthW(); m_area.SetSel(tam, tam); m_area.ReplaceSel(novotxt + L"\n"); }