69276

Кнопки, перемикачі

Лекция

Информатика, кибернетика и программирование

Вивчення класів елементів управління не випадково почате саме з класу кнопки, оскільки це найбільш часто використовуваний елемент управління, який присутній практично в кожному діалоговому вікні.

Украинкский

2014-10-02

49.5 KB

0 чел.

Лекція № 18

Тема: Кнопки, перемикачі

План

  1.  Застосування класу CButton
  2.  Кнопки
  3.  Перемикачі
  4.  Обробка подій перемикача
  5.  DDX і перемикачі

Застосування класу CButton

Вивчення класів елементів управління не випадково почате саме з класу кнопки, оскільки це найбільш часто використовуваний елемент управління, який присутній практично в кожному діалоговому вікні. Вважаємо, ні для кого не буде новиною, що клас CButton інкапсулює функціональні можливості елементу управління кнопка, а ось про те, що клас CButton здатний створювати кнопки чотирьох різних стилів (прапорці (checkbox), перемикачі (radio button), групові перемикачі (group box), а також найзвичайніші нажимные кнопки (push button)), відомо можливо не всім. Цілком очевидно, що якщо в редакторові діалогових вікон перетягнути один з цих елементів управління на шаблон діалогового вікна, то піклуватися про те, як саме буде створена ця кнопка не доведеться. Але якщо кнопку знадобиться створити динамічно, то про допустимі значення її стилів, а також про способи їх установки (за допомогою функції CButton::Create, прототип якої приведений нижче) слід знати.

virtual BOOL Create(LPCTSTR IpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);

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

 

Стиль   Опис

BS_PUSHBUTTON  Звичайна кнопка

BS_DEFPUSHBUTTON  Кнопка з товстою окантовкою. У діалогових вікнах зазвичай позначає кнопку за умовчанням (тобто ту, яка спрацює при натисненні клавіші <Enter>)

BS_RADIOBUTTON  Елемент управління перемикач

BS_AUTORADIOBUTTOM Перемикач, вибір якого скидає решту всіх перемикачів в групі

BS_GROUPBOX   Елемент управління група

BS_CHECKBOX  Стандартний прапорець

BS_AUTOCHECKBOX  Прапорець, який при клацанні встановлює і скидає сам себе

BS_3STATE   Прапорець, що має три стани: вибраний (selected), скинутий (deselected) і невизначений (indeterminate)

BS_AUTO3STATE  Аналогічний прапорцю BS_3STATE за винятком того, що при клацаннях автоматично (циклічно) змінює свій стан

У цьому розділі мається на увазі, що елементи управління створюються за допомогою редактора діалогових вікон, а потім зв'язуються із змінними-членами класу елементу управління діалогового вікна за допомогою DDX.

Знову відкрийте створений раніше проект ControlsDemo і додайте діалогове вікно з ідентифікатором IDD_BUTTONS. Додайте для нього клас, похідний від CDialog, на ім'я CButtonsDlg. Додайте в клас CMainFrame обробник події клацання на цій кнопці (його код приведений нижче), Крім того, упевніться, що на початку файлу Mainfrra.срр підключений файл заголовка ButtonsDlg.h.

void CMainFrame::OnControlsButtons()

{

CButtonsDlg().DoModal() ;

)

Отримавши діалогове вікно, здатне відобразити кнопку і відреагувати на взаємодію з нею, давайте розглянемо різні типи кнопок.

Кнопки

Про кнопки (button) можна сказати небагато, оскільки зазвичай вони використовуються лише для ініціалізації користувачем яких-небудь дій в додатку. Саме тому в статтях, присвячених програмуванню кнопок, про їх функціональні можливості мова ніколи не йде, а основна увага приділяється створенню химерних кнопок з непрямокутними формами або вишуканими зображеннями. Докладніша інформація про кнопки, що містять растрові зображення, приведена в розділі "Кнопки із зображенням".

Найбільш цікавим із стилів кнопок є стиль BS_DEFPUSHBUTTON. Він може бути встановлений в діалоговому вікні Properties елементу управління (для цього досить привласнити властивості Default значення True). У діалогових вікнах ця кнопка з товстою окантовкою позначає кнопку за умовчанням. Якщо користувач, не змінюючи фокус введення, натисне клавішу <Enter>, то саме ця кнопка пошле діалоговому вікну повідомлення WM_COMMAND, нібито користувач клацнув на ній мишею. Звернете увагу, це роисходит тільки в тому випадку, якщо фокус введення не був переміщений, крім того, натиснення клавіші <Enter>, у той час коли кнопка володіє фокусом введення (незалежно від її стилю), рівнозначно клацанню на ній.

Як вже було сказано, щоб створити обробник повідомлення WM COMMAND, передаваного при клацанні на кнопці, на зображенні цій кнопці достатньо двічі клацнути в редакторові діалогових вікон. При цьому обробник повідомлення WM_COMMAND в класі діалогового вікна буде не тільки створений, але і автоматично асоційований з кнопкою в шаблоні діалогового вікна, що володіє відповідним ідентифікатором. Звернете увагу, якщо клас діалогового вікна ще не був асоційований з шаблоном діалогового вікна, то автоматично викликається майстер MFC Class Wizard, що дозволить створити відповідний клас діалогового вікна.

Перемикачі

Перемикач (radio button) є круглою кнопкою з рядком тексту опису. Цей елемент управління отримав своє ім'я від старовинних автомобільних радіоприймачів, горизонтальних кнопок-перемикачів, що володіють набором, при натисненні на одній з яких інша, натиснута раніше, виштовхувалася. Тому перемикачі поміщають зазвичай усередині елементу управління група (group box control), щоб наочніше продемонструвати їх взаємозв'язок. У додатку перемикачі застосовують для того, щоб надати користувачеві можливість вибору одного з декількох взаємовиключних параметрів. У середовищі розробки Visual Studio .NET можна знайти безліч прикладів застосування цього елементу управління. При створенні нового проекту MFC, наприклад, діалогове вікно Application Type (Тип додатку) містить три набори перемикачів, що дозволяють вибрати тип додатку (SDI, MDI або діалоговий), стиль проекту (Windows Explorer або стандартний MFC) і застосування MFC (як сумісна використовувана бібліотека DLL або бібліотеки, підключеної статично). Як можна відмітити, вибір один із значень (усередині кожної з груп) відміняє вибір будь-якого іншого.

Обробка подій перемикача

Більшість обробників події клацання на звичайній кнопці служать для негайного виконання певного завдання, обробник клацання на перемикачі, навпаки, служить лише для зміни стану призначеного для користувача інтерфейсу діалогового вікна. Дане діалогове вікно — хороший приклад подібної ситуації, оскільки в цьому випадку деякі з елементів управління повинні бути доступні тільки тоді, коли вибраний відповідний ним перемикач. Отже, додамо обробники для трьох перемикачів групи Tender Information (їх код приведений нижче).

В даному випадку має сенс звернути увагу на наступні моменти. По-перше, за допомогою функції GetDlgltem отримаємо покажчик на об'єкт CWnd для кожного з елементів управління, доступністю яких належить управляти. Причина, по якій вибравши саме цей підхід, а не DDX, дуже проста: оскільки в даному демонстраційному застосуванні не передбачається подальше застосування цих елементів управління для Інших цілей, окрім дозволу/заборони доступу до них, немає ніякої реальної необхідності в спеціальній змінній-членові, що зберігається впродовж всього періоду існування діалогового вікна. По-друге, встановлені за умовчанням ідентифікатори елементів управління IDC_EDIT1 і IDC_EDIT2 були змінені на більш інтуїтивно зрозумілі. Цілком очевидно, це зробило код більш читабельним. По-третє, цей код виглядає просто огидно! Якщо запустити це застосування, то працювати воно звичайно буде, але автор особисто і, вважаємо, всі останні також неполюбляють такий надмірний код. Оскільки ж бути в тих випадках, коли, як і тут, доводиться мати справу з трьома окремими обробниками подій? Відповідь проста: "Всі обробники подій необхідно об'єднати в один". Обидва способи реалізації цього підходу викладено далі.

void CButtonsDlg::OnBnClickedCreditcard()

{

CWnd* pWnd;

pWnd = GetDlgItem(IDC_CARDNUMBER);

ASSERT(pWnd);

if (pWnd) { pWnd->EnableWindow(TRUE); }

pWnd = GetDlgItem(IDC_EXPIRATION);

ASSERT(pWnd);

if (pWnd) { pWnd->EnableWindow(TRUE); }

pWnd = GetDlgItem(IDC__CHECKNUMBER);

ASSERT(pWnd);

if (pWnd) { pWnd->EnableWindow(FALSE); }

}

DDX і перемикачі

Подібно до того, як функція DDX DDX_Text дозволяє асоціювати елемент управління із змінною-членом, що містить текст цього елементу управління, спеціальна функція DDX DDX_Radio організовує взаємодію з перемикачами. Ця функція дозволяє пов'язати з групою перемикачів змінну типу int (цілочисельну). Звернете увагу, ця функція застосовується не для всіх перемикачів, а тільки для першого перемикача в групі. Цілочисельне значення містить номер вибраного перемикача в групі (починаючи з нуля), крім того, значення -1 свідчить про відсутність вибору.

Отже розглянемо, як все це можна зробити.

1. Додайте в клас CButtonsDlg змінну-член типу int на ім'я m_iAnswer.

2. Зміните ідентифікатори ресурсів кнопок Yes (Так), No (Немає) і Maybe (Можливо) перемикача на IDC_BTN_YES, IDC_BTN_N0 і IDC__BTN_MAYBE відповідно. Хоч це і не обов'язково, але зробить код зрозумілішим.

3. Додайте у функцію CButtonsDlg: :DoDataExchange виклик наступної функції (новий рядок виділений напівжирним шрифтом).

void CButtonsDlg::DoDataExchange(CDataExchange* pDX)

{

СDialog::DoDataExchange(pDX);

DDX_Radio(pDX, IDC_BTN_YES, m_iAnswer);

}

 

4. Зміните ідентифікатор ресурсу кнопки Get Values (Набути значень) на IDC_GET_RADIOBUTTON_VALUES, а також додайте обробник події клацання на ній. Обробник повинен відображати поточний стан перемикачів при кожному клацанні на кнопці Get Values.

Звернення до функції DDX_Radio для елементу управління, що не володіє стилем WS_GROUP (Group = True), приведе до помилки, оскільки Вона застосовується лише до першого елементу в групі перемикачів.

Відкомпілювавши і запустивши додаток, можна переконатися, що цей обробник дозволяє встановити взаємодію між кнопкою і перемикачем.


 

А также другие работы, которые могут Вас заинтересовать

80521. Функціональна структура типової інформаційної системи для потреб оцінювання 30.76 KB
  Системи обробки даних в оціночній діяльності. Автоматизовані інформаційні системи для ріелторських компаній. Крім того проект на предмет його повноти взагалі не розглядається і фактично втрачається можливість науково обґрунтування вибору і оцінки напрямків розвитку інформаційної системи комплексу технічних засобів та побудови її моделі.
80522. Пакети комп`ютерних програм, використовуваних в оціночній діяльності 78.22 KB
  Програмне забезпечення оціночної діяльності Програмне забезпечення ПЗ це сукупність програм які забезпечують спілкування користувача з комп`ютерною технікою і орієнтуються на вирішення задач певного класу. Компютерні бази даних з програмним забезпеченням які рекомендують застосовуюти при оцінці колісних транспортних засобів КТЗ: Комп`ютерні програми для складання кошторису відновлювального ремонту КТЗ іноземного виробництва udtex М21 udtex М95 ...
80523. Організація оціночних досліджень із виеористанням інформаційних технологій 168.95 KB
  АРМ є професійно орієнтованою інформаційнообчислювальною системою що працює як автономно так і в мережі. Масова поява персональних компютерів в офісі й обєднання їх у мережі створила принципово нове технологічне середовище для ефективного управління документообігом. Сукупність прикладних процесів і БД що використовуються спільно обчислювальними процесами в ІС називають розподіленою системою PC а вузли мережі вузлами PC.
80524. Автоматизація процесів оцінювання нерухомості 124.9 KB
  Головні цілі впровадження ІС в оцінюванні. Головні цілі впровадження ІС в оцінюванні. Основними факторами які впливають на впровадження інформаційних систем є потреби організацій та користувачів а також наявність відповідних засобів для їх формування. Впровадження корпоративної ІС розробленої самостійно або придбаної у постачальника часто супроводжується ломкою перепроектувало існуючих на підприємстві процесів бізнесу...
80525. Автоматизація процесів оцінювання машин та обладнання 70.7 KB
  Автоматизація обліку матеріальних цінностей Матеріальні цінності це сировина і матеріали покупні напівфабрикати і комплектуючи вироби тара і тарні матеріали; паливо будівельні матеріали і обладнання для установки; малоцінні і швидкозношувані предмети спецодяг і спецвзуття. Основними задачами що вирішуються на цій ділянці є своєчасне повне і достовірне відображення в обліку а потім видання необхідних оброблених на ПЕОМ це настільна або портативна високопродуктивна обчислювальна система...
80526. КУЛЬТУРА УКРАЇНИ XIV – I ПОЛ. XVII СТОЛІТТЯ 1.97 MB
  Існує думка, що період XIV – перш. пол. XVII ст. мало відображений у джерелах, так як був бідний подіями, які могли залишити помітний слід в історії. Ближче до істини інша точка зору: життя було значно багатшим, ніж це зафіксовано в документах і пам\'ятках культури, що до нас дійшли
80527. Українська культура в другій половині ХХ століття 39.07 KB
  Розвиток української культури в другій половині ХХ ст. У Донецькій та Кримській областях не залишалося жодної української школи. ЦК КПРС прийняв нову постанову що підсилило русифікацію української системи освіти. Серед них можна назвати Історію української літератури Історію української мови Радянську енциклопедію історії України Історію українського мистецтва.
80528. Витоки української культури. Матеріальна та духовна культура словянського світу 1тис. нашої ери 562 KB
  Термін «культура» вперше зустрічається в античному світі. Його початкове значення – обробка rрунту, внесення людиною змін у природу. Надалі термін «культура» отримав більш універсальне значення.Культура - це все, що створено людиною.
80529. Українська культура у другій половині ХХ століття 77 KB
  Розвиток української культури у другій половині ХХ ст. У Донецькій і Кримській областях не залишалося жодної української школи. ЦК КПРС прийняв нову постанову що підсилило русифікацію української системи освіти. Серед них можна назвати Історію української літератури Історію української мови Радянську енциклопедію історії України Історію українського мистецтва .