КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Клас CListBoxДавайте додамо в нашу програму ListBox (список). Для такого списку в MFC існує клас CListBox. Для додавання списку ми повинні спочатку визначити у віконному класі покажчик на змінну типу CListBox: CButton * m_btn1; CButton * m_btn2; CListBox * m_lbListBox; ...
Далі ми повинні створити відповідний об'єкт: int CMyMainWnd :: OnCreate (LPCREATESTRUCT lpCreateStruct) { m_btn1 = new CButton; m_btn2 = new CButton; m_lbListBox = new CListBox; ... m_lbListBox-> Create (WS_VISIBLE | WS_CHILD | LBS_STANDARD | WS_HSCROLL | LBS_STANDARD, CRect (130,0,230,180), this, 1202); return 0; } Параметри у функції Create аналогічні параметрам однойменної функції для кнопки. У першому з них присутні деякі стилі, специфічні для ListBox'а (з префіксом LBS_). Останній параметр, як завжди, треба вибрати унікальним. Так як ми створили наш ListBox динамічно, то його треба знищити в деструкції класу: ~ CMyMainWnd () { ... delete m_btn2; delete m_lbListBox; }
Запускаємо програму. На формі повинен з'явиться список. Природно він порожній. Додамо в функції OnCreate кілька елементів для нього: int CMyMainWnd :: OnCreate (LPCREATESTRUCT lpCreateStruct) { ... m_lbListBox-> Create (WS_VISIBLE | WS_CHILD | LBS_STANDARD | WS_HSCROLL | LBS_STANDARD, CRect (130,0,230,180), this, 1202); m_lbListBox-> AddString ("Igor"); m_lbListBox-> AddString ("Otto"); m_lbListBox-> AddString ("Victor"); return 0; }
Цей список буде з'являтися при запуску програми. Подивимося тепер більш докладно, як ми можемо з цим списком працювати. Подивимося, що ми взагалі можемо з елементами списку робити. Операцій не так вже й багато. Додати елемент на певну позицію, видалити елемент з певної позиції, перерахувати елементи і т. д. Давайте все це втілювати. У нас є кнопка з написом MyButton. Всі наші дії зі списком будуть відбуватися при натисканні цієї кнопки. Давайте для початку додамо елемент на певну позицію. Для цього напишемо наступний код: void CMyMainWnd :: f () { m_lbListBox-> InsertString (1, "New String"); }
Метод класу InsertString для CListBox вставляє рядок, передану в якості другого параметра, на місце, що задається першим параметром. Нумерація при цьому починається з нуля. Запустіть програму і натисніть на кнопку MyButton. На першому місці в нашому списку з'явиться рядок New String:
Для видалення рядка з якимсь номером використовуєте метод DeleteString. Наприклад, наступний код буде видаляти верхній елемент нашого списку (пам'ятаєте, що нумерація елементів починається з нуля): void CMyMainWnd :: f () { m_lbListBox-> DeleteString (0); }
Тепер подивимося, як очистити весь список. Для цього використовуємо метод ResetContent: void CMyMainWnd :: f () { m_lbListBox-> ResetContent (); }
Параметрів у цього методу немає. Рухаємося далі. Що ми ще зі списком можемо зробити? Ну, наприклад, підрахувати кількість елементів. Давайте на цей раз код помістимо в таймер - так, щоб кількість елементів списку відображалося в заголовку вікна: void CMyMainWnd :: OnTimer (UINT nIDEvent) { ... Else { CString s; s.Format ("% d items in ListBox", m_lbListBox-> GetCount ()); SetWindowText (s); } } Тепер після запуску програми у нас в заголовку вікна буде показуватися кількість елементів списку: І, наостанок, подивимося, як знайти потрібну нам рядок у списку. Для цього використовуємо метод FindString: void CMyMainWnd :: f () { ... int k = m_lbListBox-> FindString (0, "Igor"); if (k == LB_ERR) AfxMessageBox ("Рядок не знайдено"); else { CString s; s.Format ("Рядок знайдена на% d-му місці", k); AfxMessageBox (s); } } Даний код шукає рядок "Igor". Якщо вона є, то наш метод поверне номер цього рядка, а якщо ні, то значення LB_ERR.
КОНТРОЛЬНІ ЗАПИТАННЯ 1. Як проводитись додавання кнопки до вікна? 2. Як виконується обробка натиснення кнопки? 3. Що таке ClistBox? 4. Як працювати з елементом ClistBox? 5. Як виконати пошук рядків у списку? Лекція 7 Тема: Програмування інтерфейсу користувача:клас CComboBox ПЛАН: 1. Клас CcomboBox бібліотеки MFC. створення ComboBox 2. Завдання реакції на вибір в ComboBox 3. Операції з елементами 4. Діалог в якості головного вікна
1. Клас CcomboBox бібліотеки MFC. створення ComboBox Комбінований список. Клас CcomboBox бібліотеки MFC Елемент управління список, що розкривається (combo box control), інкапсульований класом CcomboBox, являє собою унікальний елемент управління, фактично поєднує два елементи управління в одному. Прямокутне поле, яке бачить користувач у нерозкритого списку, являє собою поле введення, а його розкрита частина - елемент управління звичайний список. Фактично, існують 3 різних типу списку, що розкривається, що розрізняються стилем, встановленим при їх створенні. Типи списків, що розкриваються (задаються значенням властивості Type), значення стилю вікна (використовуваного для створення списку, що розкривається за допомогою функції CreateWindow) і опис відображуваного на екрані елемента керування, наведені в таблиці. Список, що розкривається використовується в тих випадках, коли користувачеві необхідно надати на вибір список допустимих значень. Список, що розкривається в стилі Drop-down list найкраще, ймовірно, підходить для тих випадків, коли користувач може лише вибрати одне з допустімийх значень, оскільки запис в полі введення заборонена. Для ситуацій, коли поользователь може вводити в список додаткові значення, найбільш підходить стиль Simple або Drop-down. Комбінований список забезпечує всю повноту функціональних можливість списку в поєднанні з можливостями впровадженого елемента керування - статичного тексту або елемента редагування. Звідси і походить назва елемента управління: - комбінований список. Список може бути або спадним, у відповідь на натискання кнопки в правій частині елемента, або постійно видимим. Обраний елемент відображається у вікні списку. Існують три різновиди комбінованих списків: • простий комбінований список; • розкривається комбінований список; • список, що розкривається. Простий комбінований список видний завжди, а вікно редагування яв-ляется дружнім (підлеглим) елементом управління. Розкривається комбінований список виводиться на екран тільки тоді, коли його розкривають, а вікно редагування є дружнім елементом. Список, що розкривається виводиться на екран, коли його розкривають, а дружнім елементом є статичний текст. Усі функціональні можливості комбінованого списку визначені в класі CComboBox бібліотеки MFC. Клас CComboBox є похідним від класу cwnd і успадковує всі його можливості. Комбінований список може бути створений як програмно, так і доданий в редакторі ресурсів (останній варіант набагато зручніше). Стилі, повідомлення комбінованого списку і методи класу CComboBox Комбінований список може використовувати елементарні стилі, доступні всім об'єктам класу cwnd, а також ряд спеціальних стилів (табл. 7.2). Стиль комбінованого списку визначає його зовнішній вигляд і поведінку. Стилі встановлюються або при ініціалізації методом CComboBox :: Create, або завданням відповідних властивостей в редакторі ресурсів.
Таблиця 7.2 - Елементарні стилі комбінованого списку
Примітка Всі макроси стилів смуги прокрутки починаються із префікса cbs_ (від Combo Box Styles). Частина комбінованого списку - безпосередньо список - може виводи-диться на екран весь час (стиль cbs simple) або може розкриватися з текстового поля (стилі cbs dropdown і cbs_dropdownlist). Поточна обрана запис списку виводиться в прямокутному вікні, яке являє собою вікно найпростішого текстового поля і може бути доступна (стилі cbs simple і cbs dropdown) або недоступна (стиль cbs dropdownlist) для редагування. Якщо комбінований список визначений як розкривається, то при натисканні символьної клавіші на клавіатурі рядок, що починається з даного символу, буде виділена. Методи класу CComboBox бібліотеки MFC діляться на методи загального призначення, спеціальні рядкові методи і віртуальні методи. Методи загального призначення класу CComboBox перераховані в табл. 7.3 і застосовні для всіх трьох типів комбінованих списків. Таблиця 7.3 - Методи загального призначення класу CComboBox
Строкові методи класу CComboBox перераховані в табл. 7.4, застосовні для всіх трьох типів комбінованих списків і призначені для обра лення строкових даних елементів списку. Таблиця 7.4 - Спеціальні методи для роботи з рядками класу CComboBox
На цьому уроці ми з вами подивимося основні властивості та методи класу CComboBox. Для того, що б не плутатися з кодом від попередніх уроків, створіть просте вікно, і додайте в нього меню MyMenu з підменю Dialog. При збереженні дайте йому ім'я resource.rc: Після цього підключіть ClassWizard і створіть діалогове вікно, і зробіть, щоб це вікно показувалося при виклику меню Dialog. Додайте в нашому діалозі елемент ComboBox:
|