КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Створення ComboBoxПісля такої підготовчої роботи приступаємо безпосередньо до ComboBox. Для початку подивимося, що треба зробити, щоб при появі діалогового вікна в ComboBox'е вже з'явився деякий список. Для цього нам спочатку треба виконати деякі попередні кроки. Для того, щоб працювати з будь-яким елементом, в тому числі і з ComboBox, ми повинні поставити йому деяку змінну. Для цього використовується такий засіб, як ClassWizard. Викличте його (Ctrl + W) і перейдіть на вкладку Member Variables. Зверніть увагу, що в рядку з ідентифікатором нашого ComboBox'а (IDC_COMBO1) нічого немає: Натисніть на кнопку Add Variable. У вікні Add Member Variable додайте ім'я змінної (у нас це m_cbComboBox) і в категорії (Category) встановіть значення Control: Натисніть OK. Тепер у рядку ClassWizard для ідентифікатора IDC_COMBO1 з'явиться змінна m_cbComboBox типу CComboBox: Тепер нам треба написати заготовку для коду, який, який буде виконаються при ініціалізації діалогу. Для цього знову викличте ClassWizard (якщо ви його вже закрили), перейдіть в ньому на вкладку MessageMaps, виберіть клас CDlg в Class name, у списку Object IDs виберіть CDlg, і в списку повідомлення виберіть WM_INITDIALOG:
Після цього натисніть в цьому ж діалоговому вікні на кнопку Add Function і потім на Edit Code. У вікні коду введіть наступний текст: BOOL CDlg :: OnInitDialog () { CDialog :: OnInitDialog (); / / TODO: Add extra initialization here m_cbComboBox.AddString ("Igor"); m_cbComboBox.AddString ("Otto"); m_cbComboBox.AddString ("вушка"); return TRUE; ...
Тепер можете запустити додаток, зайти в меню і переконається, що в ComboBox'е є три значення. Правда ComboBox виглядає не цілком привабливим: Виправимо це. Для цього відкрийте редактор діалогів, клацніть на стрілочці в правій частині нашого ComboBox'а, і потім потягніть мишкою на нижній край з'явився (порожнього) списку: Після цього ваш ComboBox повинен бути вже більш звичних розмірів.
2. Завдання реакції на вибір в ComboBox
Для початку давайте передамо деяке значення з нашого ComboBox'а в головне вікно програми. Передане значення з'явиться в заголовку головного вікна. Для цього внесіть в обробник меню (того самого, при виклику якого з'являється наш діалог) такі зміни: void CMyMainWnd :: OnMyMenuDialog () { CDlg dlg; dlg.m_sName = m_sName; if (dlg.DoModal () == IDCANCEL) / / якщо натиснули на cancel, return; / / то виходимо m_sName = dlg.m_sName; SetWindowText (m_sName); }
Тепер залишилося тільки додати в клас CMyMainWnd змінну m_sName типу CString: public: CString m_sName; ... Тепер при запуску програми обраний нами значення з ComboBox'а буде з'являтися у заголовку нашого вікна: 3. Операції з елементами Розглянемо тепер операції з елементами ComboBox'а. Основні з них - це додавання в кінець списку (AddString, розглянута на минулому уроці), вставки (InsertString), видалення (DeleteString) і знаходження потрібної рядки (FindString). Їх використання ясно з наступного прикладу: BOOL CDlg::OnInitDialog() { ... m_cbComboBox.AddString("Ушку"); //вставка строки на первое место (нумерация с нуля!) m_cbComboBox.InsertString(1,"Новая строка"); //удаление строки номер ноль (нумерация с нуля!) m_cbComboBox.DeleteString(0); //ищем строку Victor //Если она есть, то ее номер запишется в k int k=m_cbComboBox.FindString(0, "Victor"); if(k==CB_ERR) //Если такой строки нет, то k будет равно CB_ERR AfxMessageBox("Сторока не найдена!"); Else { CString s; s.Format("Строка найдена на %d-м месте.",k); AfxMessageBox(s); } ... }
З важливих функцій варто ще згадати ResetContent, яка служить для видалення з ComboBox'а всіх його елементів. Приклад її використання: ... m_cbComboBox.ResetContent (); ...
4. Діалог в якості головного вікна
У цьому питанні ми з вами подивимося, як можна створити програму на базі діалогового вікна. Для початку зробимо кілька стандартних кроків, а саме зробимо додаток типу Win32 Application з ім'ям Dialog_based:
Додамо в нього файл Dialog_based.cpp. Не забудемо змінити настоянки проекту на використання MFC (Project-> Settings, далі вкладка General): Тепер додаємо ресурс діалогового вікна (Insert-> Resource-> Dialog, далі кнопка New). У діалоговому вікні нічого змінювати не будемо - нехай поки там будуть тільки дві кнопки - OK і Cancel (Додавати будемо в наступних уроках). Натисніть далі на кнопку Save All й для ресурсу нашого діалогу введіть ім'я Resource.rc:
Тепер ми повинні додати файли нашого діалогу в проект (Project-> Add to Project-> Files, далі вибираємо resource.h і resource.rc, натискаємо на OK). У нашому проекті повинна з'явиться вкладка Resource, а на вкладці FileView з'являться два приєднаних файлу: Далі додаємо наступний код: # include "afxwin.h" # include "resource.h" / / для використання CDialog
class CMyDlg: public CDialog {/ / Наш клас - нащадок CDialog public: CMyDlg (CWnd * pParent = NULL); }; / / створюємо діалог на нашу шаблоном CMyDlg :: CMyDlg (CWnd * pParent): CDialog (IDD_DIALOG1, pParent) {} class CMyApp: public CWinApp { public: virtual BOOL InitInstance (); }; BOOL CMyApp :: InitInstance () { CMyDlg dlg; m_pMainWnd = &dlg; dlg.DoModal (); / / показуємо діалог return TRUE; } CMyApp theApp; Тепер запускаємо нашу програму. З'явиться діалогове вікно:
КОНТРОЛЬНІ ЗАПИТАННЯ 1. Що представляє собою елемент СomboBox? 2. Перелічите 3 типи комбінованого списку, що розкривається, які розрізнюються стилем їх створення? 3. У яких випадках використовується елемент список, що розкривається? 4. Перелічите основні методи загально призначення класу CcomboBox? 5. Етапи Створення ComboBox? 6. Як програмно задати реакцію на вибір користувачем значення в ComboBox? 7. Які операції з елементами ComboBox ви знаєте? 8. Як можна створити програму на базі діалогового вікна? Лекція 8 Тема: Програмування інтерфейсу користувача: меню, діалогові вікна ПЛАН
|