Студопедия

КАТЕГОРИИ:

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


Створення 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

Тема: Програмування інтерфейсу користувача: меню, діалогові вікна

ПЛАН


Поделиться:

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





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