Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Клас 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_disablenoscroll, свойство Disable No Scroll равноTrue Блокує (затінює) вертикальну смугу прокрутки списку, замість того щоб прибрати її в тому випадку, коли список містить недостатню для прокрутки кількість елементів
cbs_dropdown, свойствоTypeравноDropdown Список не виводиться на екран до тих пір, поки користувач не натисне на кнопку розкриття. Обраний елемент списку відображається у вікні редагування
cbs_dropdownlist, свойство Type равноDrop List Список не виводиться на екран до тих пір, поки користувач не натисне на кнопку розкриття. Обраний елемент списку відображається у вікні статичного тексту
cbs_lowercase, свойство Uppercase равноFalse Перетворює весь текст у нижній регістр, як у вікні вибору, так і в списку
cbs_nointegralheight,свойствоNo Integral HeightравноTrue Встановлює точно такі ж розміри комбиниро-ванного списку, які були задані при його створенні. Список показує частину елементів
cbs_oemconvert, свойство OEM Convert равноTrue Перетворює рядок в кодування OEM (застосовується у поєднанні зі стилями CBS_SIMPLE І CBS DROPDOWN)
cbs_ownerdrawfixed, свойство Owner Draw равноFixed Встановлює однакову висоту елементів у списку
cbs_ownerdrawvariable, свой­ство Owner Draw равноVariable Встановлює неоднакову висоту елементів в списку
cbs_simple, свойствоTypeравноSimple Список завжди видно, а вибраний елемент списку відображається в підлеглому вікні редагування
cbs_sort, свойствоSort равно True Автоматично сортує рядки в списку
cbs_uppercase, свойство Uppercase равноTrue Перетворює весь текст у верхній регістр, як у вікні вибору, так і в списку

 

Примітка

Всі макроси стилів смуги прокрутки починаються із префікса cbs_ (від Combo Box Styles).

Частина комбінованого списку - безпосередньо список - може виводи-диться на екран весь час (стиль cbs simple) або може розкриватися з текстового поля (стилі cbs dropdown і cbs_dropdownlist). Поточна обрана запис списку виводиться в прямокутному вікні, яке являє собою вікно найпростішого текстового поля і може бути доступна (стилі cbs simple і cbs dropdown) або недоступна (стиль cbs dropdownlist) для редагування. Якщо комбінований список визначений як розкривається, то при натисканні символьної клавіші на клавіатурі рядок, що починається з даного символу, буде виділена.

Методи класу CComboBox бібліотеки MFC діляться на методи загального призначення, спеціальні рядкові методи і віртуальні методи.

Методи загального призначення класу CComboBox перераховані в табл. 7.3 і застосовні для всіх трьох типів комбінованих списків.

Таблиця 7.3 - Методи загального призначення класу CComboBox

Метод Опис
Clear Видаляє елемент із списку
Сору Копіює вибраний елемент (у форматі тексту) в буфер обміну
Cut "Вирізає" вибраний елемент тексту і поміщає його в буфер обміну (у форматі тексту)
GetCount Повертає число елементів у списку
GetCurSel Повертає індекс вибраного елементу
GetDroppedControlRect Повертає екранні координати видимої частини розкривається комбінованого списку
GetDroppedState Визначає, чи видна розкривається частину списку
GetDroppedWidth Повертає мінімально допустиму ширину розкривається частині списку
GetEditSel Витягує положення першого і останнього символів виділеного тексту у вікні редагування комбінованого списку
GetExtendedUI Визначає, чи має комбінований список стандартний або розширений інтерфейс користувача
GetHorizontalExtent Повертає величину в пікселах, на яку можливо гори зонтальное прокручуванню розкривається частині списку
GetltemData Повертає 32-розрядне значення, яке додаток пов'язує із зазначеним елементом комбінованого списку
GetltemDataPtr Повертає покажчик типу void * на спеціальне 32-розрядне значення, яке додаток пов'язує із зазначеним елементом комбінованого списку
GetltemHeight Повертає висоту елементів комбінованого списку
GetLBText Повертає рядок з комбінованого списку
GetLBTextLen Витягує довжину рядка елемента в комбінованому списку
GetLocale Витягує локальний ідентифікатор комбінованого списку
GetTopIndex Повертає індекс першого видимого елемента в спісдчной частини комбінованого списку
LimitText Обмежує довжину тексту, який користувач може ввести у вікно редагування комбінованого списку
Paste Вставляє дані з буфера обміну у вікно редагування комбінованого списку
SetCurSel Встановлює рядок у вікні редагування комбінованого списку
SetDroppedWidth Встановлює мінімально допустиму ширину розкривається частини комбінованого списку
SetEditSel Встановлює положення першого і останнього символів виділеного тексту у вікні редагування комбінованого списку
SetExtendedUI Встановлює стандартний або розширений інтерфейс користувача
SetHorizontalExtent Встановлює величину в пікселах, на яку можливо горизонтальне прокручування розкривається частини комбінованого списку
SetltemData Встановлює 32-розрядне значення, яке додаток пов'язує із зазначеним елементом комбінованого списку
SetltemDataPtr Встановлює вказівник типу void * на 32-розрядне значення, яке додаток пов'язує із зазначеним елементом комбінованого списку
SetltemHeight Встановлює висоту елементів комбінованого списку
SetLocale Встановлює локальний ідентифікатор комбінованого списку
SetTopIndex Встановлює індекс першого видимого елемента в обліковій частини комбінованого списку
ShowDropDown Показує або ховає розкриваються частина комбінованого списку

 

Строкові методи класу CComboBox перераховані в табл. 7.4, застосовні для всіх трьох типів комбінованих списків і призначені для обра лення строкових даних елементів списку.

Таблиця 7.4 - Спеціальні методи для роботи з рядками класу CComboBox

Метод Опис
AddString Додає рядок в кінець списковій частини комбінованого списку або в відповідну алфавітну позицію
DeleteString Видаляє рядок зі списку
Dir Додає імена файлів поточного каталогу в комбінований список
FindString Шукає перший строковий елемент в комбінованому списку, що має зазначений строковий префікс  
FindStringExact Знаходиться перший строковий елемент в комбінованому списку, що співпадає з рядком пошуку  
InsertString Вставляє в комбінований список рядок у позицію з вказаним індексом  
ResetContent Видаляє з комбінованого списку всі елементи і очищає вікно редагування  
SelectString Шукає рядок в комбінованому списку і, якщо знаходить, виділяє її і копіює в вікно редагування  
       

 

На цьому уроці ми з вами подивимося основні властивості та методи класу CComboBox.

Для того, що б не плутатися з кодом від попередніх уроків, створіть просте вікно, і додайте в нього меню MyMenu з підменю Dialog. При збереженні дайте йому ім'я resource.rc:

Після цього підключіть ClassWizard і створіть діалогове вікно, і зробіть, щоб це вікно показувалося при виклику меню Dialog. Додайте в нашому діалозі елемент ComboBox:

 


Поделиться:

Дата добавления: 2014-12-03; просмотров: 105; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты