Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція № 13.doc
Скачиваний:
1
Добавлен:
22.07.2019
Размер:
65.54 Кб
Скачать

Лекція № 13

Тема: Рядок стану

План

  1. Створення і маніпулювання рядками стану

  2. Стандартна поведінка рядків стану

  3. Місце розташування рядків стану

  4. Додавання в рядок стану текстових панелей

Створення і маніпулювання рядками стану

Рядок стану є багатоелементною смугою, розташованою внизу фреймового вікна. Вона використовується для відображення різних даних, специфічних для цього додатку. Практично всі додатки Windows (як SDI, так і MDI) мають рядки стану. Крім того, вони є навіть у деяких діалогових застосувань. На мал. представлений рядок стану, використовуваний текстовим процесором Microsoft Word для Windows. Звернете увагу, рядок стану відображає інформацію про поточну сторінку, розділ, рядок і позицію курсора, а також декілька додаткових панелей, що інформують про стан клавіатури і про наявність в документі слів, не знайдених в словнику Word (невелика піктограма, із зображенням книги, закресленої символом X). У цьому розділі описується, як за допомогою бібліотеки MFC створити простий рядок стану.

Рядок стану є стандартним засобом сповіщення користувача про стан додатку, а також засобом відображення будь-якої іншої інформації, специфічної для додатку

Стандартна поведінка рядків стану

Кожного разу, коли майстер AppWizard створює додаток SDI або MDI, він автоматично додає в нього рядок стану, досить довгу панель, що містить (зліва направо), призначену для підказок меню, а також три менші панелі, що відображають стан клавіш Caps, Num і Scroll lock. Отже приступимо до вивчення застосування цього елементу управління.

У середовищі виконання MFC рядок стану представлений класом CStatusBar, а стандартним местомом розташування коди рядка стану є клас CMainFrame. З нього і почнемо. (Рядки стану можна створювати і для діалогових вікон, але оскільки це трохи складніше, розглянемо їх декілька пізніше.)

Створіть проект додатку SDI і, відкривши його файл заголовка mainFrm.h, звернете увагу на створене майстром AppWizard визначення змінної-члена рядка стану:

protected: // Змінні-члени вбудованих елементів управління

CStatusBar m_wndStatusBar;

Тепер відкрийте файл mainfrm.cpp і знайдіть функцію OnCreate. Як і виходить з її назви, вона виконується при створенні вікна. Вікна додатків SDI і MDI створюються усередині фреймів, що несуть відповідальність за забезпечення таких, загальноприйнятих елементів, як межі (що дозволяють змінювати розміри), рядка стану і панелі інструментів. Приведений нижче код — це і все, що потрібне функції CMainFrame::OnCreate, щоб відобразити стандартний рядок стану:

if (!m_wndStatusBar.Create(this) ||

!m_wndStatusBar.Setlndicators(indicators,sizeof(indicators)/sizeof(UINT)))

{

TRACE0("Failed to create status bar\n");

return -1; // створити не вдалося

}

Як можна відмітити, спочатку код просто викликає функцію рядка стану Create (успадковану від класу CWnd). Передаваний нею покажчик this означає, що батьківським вікном рядка стану буде об'єкт CMainFrame. Функції Create можуть бути передані і інші параметри, наприклад, стиль вікна і ідентифікатор ресурсу рядка стани, які обговорюються декілька пізніше. Проте на справжній момент цілком підходять і стандартні значення, прийняті за умовчанням для цих параметрів.

Потім слідує звернення до функції Setlndicators. Цій функції додаток передає масив значень, що є ідентифікаторами різних ресурсів, відповідних значенням, що відображаються в рядку стану. Передавані в даному випадку значення об'єднані в масив indicators (індикатори), визначення якого розташоване на початку файлу MainFrm.cpp і має наступний вигляд:

static UINT indicators[] =

{

ID_SEPARATOR // Індикатори рядка стану

ID_INDICATOR_CAPS

ID_INDICATOR_NUM

ID_INDICATOR_SCRL

};

Нескладне розслідування показує, що ідентифікатори ресурсів ID_INDICATOR_CAPS, ID_INDICATOR_NUMH, ID_INDICATOR_SCRL належать строковим ресурсам, визначеним у файлі .rc додатки таким чином (виділено напівжирному шрифтом):

STRINGTABLE

BEGIN

ID__INDICATOR_EXT "EXT"

ID_INDICATOR_CAPS "CAP"

ID_INDICATOR_NUM "NUM"

ID_INDICATOR_SCRL "SCRL"

ID_INDICATOR_OVR "OVR"

ID_INDICATOR REC "REC"

END

Що таке ідентифікатор ресурсу ID__SEPARATOR? Це спеціальне значення, що повідомляє середовище виконання, що з даною конкретною панеллю рядка стану не асоційований жоден строковий ресурс. Фактично, якщо створене майстром Аррwizard додаток запустити на виконання, то в панелі зліва від індикаторів Caps, Num і Scroll Lock буде відображений текст Ready (Готово). Але якщо потім розкрити яке-небудь меню і перемістити курсор миші на будь-який з його пунктів, можна відмітити, що ця панель рядка стану змінилася і відображає текст рядка підказки, відповідний поточному пункту меню. Отже, про рядок стану на справжній момент відоме наступне.

- Клас CMainFrame містить переменную-член типу CStatusBar.

- Ідентифікатори строкових ресурсів, що відображаються в рядку стану у вигляді набору індикаторів, визначені у файлі MainFrm. срр.

- Функція CMainFrame::OnCreate містить звернення до функції CStatusBar::Create, що дозволяє створити вікно рядка стану, а також до функції CStatusBar::Setlndicators, що дозволяє привласнити масив ідентифікаторів ресурсів тільки що створеному рядку стану.

Проте, можливості рядка стану дозволяють зробити значно більше, чим просто повідомити користувача про те, натискав він клавішу <CAPS Lock> чи ні. Отже, давайте розглянемо, як можна модифікувати рядок стану так, щоб вона задовольняла специфічним завданням конкретного застосування.