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:
- Crie um novo projeto de aplicação MFC C++ do tipo Dialog Based.
- 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”.
- Arraste um StaticText e mude sua propriedade Caption para: “Rolling Stones:”.
- 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.
- Arraste um StaticText e mude seu Caption para: “ListBox – Duplo clique nesta opção”.
- Arrate um ListBox e crie uma variável para ele chamada lista.
- Arraste um StaticText e mude seu Caption para: “Combobox – Escolha uma opção”.
- Arraste um ComboBox e crie uma variável para ele chamada combo.
- Crie um evento LBN_SELCHANGE para o componente combo e um outro LBN_DBLCLK para o componente lista.
- 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()); }