Visual – MFC – ComboBox, ListBox – OnShowWindow, Lbn_SelChange, Lbn_DblClk e Get/Set CurSel – C++

Publicado: 19 de março de 2014 em C/C++

ComboBox

Em computação, uma caixa de combinação é um elemento de interface gráfica. Um ComboBox, que permite ao usuário escolher uma das várias opções, pode ter duas formas muito diferentes. A forma padrão é a caixa de combinação não editável, que conta com um botão e uma lista suspensa de valores. A segunda forma, chamada de caixa de combinação editável, possui um campo de texto com um pequeno botão confinando-o. O usuário pode digitar um valor no campo de texto ou clique no botão para exibir uma lista drop-down.

ListBox

Em computação, uma caixa de listagem é um elemento de interface gráfica. Uma ListBox apresenta ao usuário um grupo de itens, exibidos em uma ou mais colunas. As listas podem ter muitos itens, por isso eles são muitas vezes colocados em painéis de rolagem.

OnShowWindow

É o evento que ocorre quando a o dialogo da aplicação é exibido.

Lbn_SelChange

É o evento que ocorre quando um estado de seleção é modificado.

Lbn_DblClk

É o evento que ocorre quando um duplo clique é efetuado no componente.

GetCurSel

Retorna o índice do item selecionado.

SetCurSel

Designa um item para ser selecionado.

Visual Studio

Para criar uma aplicação MFC siga os passos abaixo e use a imagem abaixo como referencia para o design do dialogo:

ComboList

  1. Crie um novo projeto de aplicação MFC C++ do tipo Dialog Based.
  2. Arraste no dialogo um GroupBox e modifique sua altura e largura para que caiba todos os componentes dentro dele, modifique sua propriedade Caption para: “ListBox e ComboBox”.
  3. Arraste um StaticText e mude sua propriedade Caption para: “Rolling Stones:”.
  4. Arraste um EditText e o posicione na frente do StaticText, mude suas propriedades  Border = False, Read Only = True e crie uma variável para ele chamada tmusica.
  5. Arraste um StaticText e mude seu Caption para: “ListBox –  Duplo clique nesta opção”.
  6. Arrate um ListBox e crie uma variável para ele chamada lista.
  7. Arraste um StaticText e mude seu Caption para: “Combobox – Escolha uma opção”.
  8. Arraste um ComboBox e crie uma variável para ele chamada combo.
  9. Crie um evento LBN_SELCHANGE para o componente combo e um outro LBN_DBLCLK para o componente lista.
  10. Complete seu código gerado automaticamente, com o código abaixo.

Exemplo:

Neste exemplo usamos um ComboBox e um ListBox para criar um programa C++ MFC e os eventos de cada um para interligar suas ações.

C++

// Código gerado automaticamente
// MFCApplication1Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "MFCApplication1.h"
#include "MFCApplication1Dlg.h"
#include "afxdialogex.h"
#include "Windowsx.h"
#include <string>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();

// Dialog Data
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()

// CMFCApplication1Dlg dialog

CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CMFCApplication1Dlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST1, lista);
	DDX_Control(pDX, IDC_COMBO1, combo);
	DDX_Control(pDX, IDC_EDIT2, tmusica);
}

BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_SHOWWINDOW()
	ON_CBN_SELCHANGE(IDC_COMBO1, &CMFCApplication1Dlg::OnCbnSelchangeCombo1)
	ON_LBN_DBLCLK(IDC_LIST1, &CMFCApplication1Dlg::OnLbnDblclkList1)
END_MESSAGE_MAP()

// CMFCApplication1Dlg message handlers

BOOL CMFCApplication1Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 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

}

void CMFCApplication1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}

// 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 CMFCApplication1Dlg::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 CMFCApplication1Dlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

// **************************
// * Desenvolvimento Aberto *
// **************************
//
// Nosso código começa Aqui

// Evento ocorre quando o dialogo é iniciado
void CMFCApplication1Dlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
	CDialogEx::OnShowWindow(bShow, nStatus);

	// Declara uma Array de itens
	CString itens[] = { L"Satisfaction", L"Paint it Black", L"Wild Horses", L"Brown Sugar",
		L"Sympathy for the Devil", L"Start Me Up" };

	// Adiciona os itens aos componentes
	for (int i = 0; i < 6; i++)
	{
		lista.AddString(itens[i]);
	}

	for (int i = 0; i < 6; i++)
	{
		combo.AddString(itens[i]);
	}

	// Indica qual item sera selecionado
	lista.SetCurSel(0);
	combo.SetCurSel(0);

}

// Evento ocorre na mudança de estado do item
void CMFCApplication1Dlg::OnCbnSelchangeCombo1()
{
	CString texto;
	combo.GetLBText(combo.GetCurSel(), texto);
	tmusica.SetWindowTextW(texto);
	lista.SetCurSel(combo.GetCurSel());
}

// Evento Ocorre no duplo clique do mouse
void CMFCApplication1Dlg::OnLbnDblclkList1()
{
	CString texto;
	lista.GetText(lista.GetCurSel(), texto);
	tmusica.SetWindowTextW(texto);
	combo.SetCurSel(lista.GetCurSel());
}
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 )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s