Dodawanie kontrolek do aplikacji MFC w Visual C++

autor: Kuba Bieszke

Aplikacji ma pokazać podstawowe kontrolki Windows i ich możliwości. Kod w kolorze czerwonym oznacza dodanie tych linijek w danym miejscu. Gotowy program można ściągnąć z działu pliki do skopiowania.

1. Stworzenie aplikacji dzięki kreatorowi MFC AppWizard (exe) opartej na oknie dialogowym (1 krok kreatora). W następnych punktach nic nie zmieniamy.

2. Edytujemy okno dialogowe (jeden z zasobów) wstawiając odpowiednie kontrolki jak na rysunku. Dla kontrolek Group Box, Static Text, Button, Check Box oraz Radio Button ustawiamy w właściwościach tekst jaki ma być wyświetlony zakładka GENERAL i własność CAPTION.

3. Ustawienia zdarzeń kontrolek (prócz Group Box, Static Text):

dla kontrolki Edit Box: z menu View wybierz ClassWizard..., zakłądka Member Variables, wybierz obiekt: IDC_EDIT1 i kliknij Add Variable..., w oknie dialogowym uzupełnij, Member variable name: m_edit, Category: Value, Variable type: CString.

dla kontrolki Button: prawym kliknięciem na przycisku otwórz menu i wybierz Events..., w New Windows messages/events wybierz: BN_CLIKED, kliknj: Add and Edit, nazwij: OnPrzycisk, przejście do kodu:

void CKontrolkiDlg::OnPrzycisk()
{
m_edit = _T("Kliknięto PRZYCISK"); // nowy tekst
UpdateData(false); // zmaina tekstu
}

dla kontrolki Check Box: ClassWizard..., zakładka Message Maps, wybierz obiekt: IDC_CHECK1 i Message: BN_CLICKED, kliknij Add Function, nazwji OnWybor1, tak samo dla Check2. Zmiana kodu:

void CKontrolkiDlg::OnWybor1()
{
m_edit = _T("Wybrano WYBÓR 1"); // nowy tekst
UpdateData(false); // zmaina tekstu
}

void CKontrolkiDlg::OnWybor2()
{
m_edit = _T("Wybrano WYBÓR 2"); // nowy tekst
UpdateData(false); // zmaina tekstu
}

dla kontrolki Radio Button: tak samo jak poprzednio, nazwy: OnOpcja1, OnOpcja2.

void CKontrolkiDlg::OnOpcja1()
{
m_edit = _T("Wybrano OPCJA 1"); // nowy tekst
UpdateData(false); // zmaina tekstu
}

void CKontrolkiDlg::OnOpcja2()
{
m_edit = _T("Wybrano OPCJA 2"); // nowy tekst
UpdateData(false); // zmaina tekstu
}

dla kontrolki List Box: ClassWizard..., zakłądka Member Variables, wybierz obiekt: IDC_LIST1 i kliknij Add Variable..., w oknie dialogowym uzupełnij Member variable name: m_lista, Category: Control, Variable type: CListBox. Przejdź do funkcji OnInitDialog i dopisz kod:

BOOL CKontrolkiDlg::OnInitDialog()
{
CDialog::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

m_lista.AddString("Element 1");
m_lista.AddString("Element 2");
m_lista.AddString("Element 3");

return TRUE; // return TRUE unless you set the focus to a control
}

ClassWizard..., zakładka Message Maps, wybierz, obiekt: IDC_LIST1 i Message: LBN_DBLCLK i kliknij Add Function, nazwji, OnDblclkLista1. Dodaj kod:

void CKontrolkiDlg::OnDblclkLista1()
{
m_lista.GetText(m_lista.GetCurSel(),m_edit);
UpdateData(false); // zmaina tekstu
}

dla kontrolki Combo Box postępujemy jak dla List Box. Nazwy IDC_COMBO2, m_combo. Dla OnInitDialog dopisz kod:

BOOL CKontrolkiDlg::OnInitDialog()
{
CDialog::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

m_lista.AddString("Element 1");
m_lista.AddString("Element 2");
m_lista.AddString("Element 3");
m_combo.AddString("Element 4");
m_combo.AddString("Element 5");
m_combo.AddString("Element 6");

return TRUE; // return TRUE unless you set the focus to a control
}

Dodaj Message CBN_SELCHANGE - OnSelchangeCombo. Dodanie kodu:

void CKontrolkiDlg::OnSelchangeCombo()
{
m_combo.GetLBText(m_combo.GetCurSel(),m_edit);
UpdateData(false); // zmaina tekstu
}