Visual – MFC – Edit Control – MultiLines – C++

Publicado: 4 de abril de 2014 em C/C++

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:

  1. Crie um novo projeto MFC – C++ – Dialog Based.
  2. Coloque no dialogo um Static Text, dois Edit Controls e um Button, use a imagem abaixo para o design da tela:

    multilines

    Multilines – Design

  3. Mude a propriedade do primeiro Edit_Control para Multilines = True e Vertical Scroll = True.
  4. Crie uma variável m_area para o primeiro Edit Control e uma variável m_texto para o segundo Edit Control.
  5. Crie um evento BN_CLICKED para o botão
  6. 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");
}

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