Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

Як вже мовилося, звичайне вікно рядка стану створює код функції-члена OnCreate основного фреймового вікна:

 

m_wndStatusBar.Create(this);

 

Насправді функція CStatusBar::Create здатна приймати три параметри; проте, два з них мають значення за умовчанням, тому функцию-член CStatusBar::Create нерідко можна побачити одержуючою два додаткові аргументи:

 

virtual BOOL Create(

CWnd* pParentWnd

DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, UINT nID = AFX_IDW_STATUS_BAR);

 

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

Другий параметр (dwStyle) — значення, використовуване для визначення стилю рядка стану, наприклад, чи є вона видимою (WS_VISIBLE), з якого боку батьківського вікна вона повинна бути відображена і так далі Розглянемо значення констант з префіксом CBRS_ детальніше.

Проглянувши вміст файлу afxres.h, можна відмітити, що розташування елементів управління, до яких відносяться і рядки стану, можна задати за допомогою чотирьох значень. Всі значення прапорів стилю, а також значення відповідних стилів вирівнювання і типів меж представлені в табл. Звернете увагу, стилі вирівнювання (CBRS_ALIGN_BOTTOM, CBRS__ALIGN_TOP, CBRS_ALIGN_RIGHT і CBRS_ALIGN_LEFT) є взаємовиключними, а стилі меж допускають сумісне використання.

Таблиця. Значення прапорів CBRS_ ДЛЯ місцеположення рядка стану

Прапор стилю Комбінація місцеположення і типу меж

CBRS_TOP CBRS_ALIGN_TOP | CBRS_BORDER_B0TTOM

CBRS_BOTTOM CBRS__ALIGN_BOTTOM | CBRS_BORDER_TOP

CBRS_LEFT CBRS_ALIGN_JLEFT | CBRS_BORDER_RIGHT

CBRS__RIGHT CBRS ALIGN RIGHT | CBRS BORDER LEFT

 

Тут, ймовірно, доречно згадати про одну незадокументовану особливість. Насправді зі всіх цих значень для рядка стану допустимі тільки два: CBRS_BOTTOM і CBRS TOP. Якщо спробувати розташувати рядок стану справа або зліва, то при компіляції додатку буде відображено повідомлення про помилку у функції Сstatusbar::calcinsiderect, що свідчить про те, що "вертикальний рядок стану не підтримується" (vertical status bar not supported). Хоч і важко уявити собі ситуацію, де міг би знадобитися вертикальний рядок стану, було б непогано, якби подібна інформація містилася в довідковій системі.

 

Засобом модифікації тексту панелі є функція CStatusBar::SetPaneText.

Синтаксис цієї функції такий:

 

BOOL SetPaneText(int nlndex,LPCTSTR IpszNewText, BOOL bUpdate = TRUE);

 

Перший параметр (nlndex) указує, яка з панелей рядка стану (починаючи з нуля) підлягає модифікації. Незабаром із цього приводу буде зроблено одне важливе зауваження. Другий параметр (IpszNewText) містить значення, підмет відображенню в цій панелі, а третій — (bUpdate) інформує середовище виконання про те, чи потрібна негайна перемальовування рядка стану чи ні. Якщо негайне перемальовування дійсно необхідне, то значенням цього параметра повинно бути TRUE.

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

Спочатку створимо строковий ресурс повідомлення користувача про відмову в доступі. Зробити це зовсім нескладно, досить відкрити представлення Resource View (Ресурси), розвернути вузол String Table (Таблиця рядків), а потім двічі клацнути на елементі таблиці рядків. Коли з'явиться перелік рядків, слід натиснути клавішу <lnsert> і набрати необхідне значення, наприклад, щось подібне до <Not logged in> (У доступі відмовлено). Залишилося змінити ідентифікатор ресурсу нового рядка на що-небудь більш осмислене, типу IDS__LOGIN_STATUS, і додати нову панель в масив індикаторів таким чином:

 

static UINT indicators[] =

{

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

IDS_LOGIN_STATUS

ID_INDICATOR_CAPS

ID_INDICATOR_NUM

ID_INDICATOR_SCRL

}

 

Але якщо відкомпілювати і запустити додаток тепер, то панель відразу відобразить напис <Not logged in> (У доступі відмовлено). Отже, необхідно модифікувати код Функції реєстрації так, щоб він викликав функцію SetPaneText об'єкту рядка стану таким чином:

 

m_wndStatusBar.SetPaneText(l, strUserld);

 

Оскільки об'єкт рядка стану m_wndstatusBar є членом класу CMainFrame, це має на увазі, що що модифікує рядок стану код також знаходиться в класі CMainFrame.

Останнє, що необхідно зробити, — це додати обробник команди оновлення строкового ресурсу. Оскільки ідентифікатором ресурсу в даному випадку є IDS_LOGIN_STATUS, необхідно додати в карту повідомлень наступний елемент і функцію:

 

BEGIN MESSAGE_MAP(CMainFrame, CFrameWnd)

ON_WM_CREATE()

ON_COMMAND(ID_LOG_IN, OnLogln)

ON_COMMAND(ID_L0G_OUT, OnLogOut)

ON UPDATE_COMMAND_UI (IDS_LOGIN_STATUS, OnLoginStatus)

END MESSAGE_MAP()

 

void CMainFrame::OnLoginStatus(CCmdUI *pCmdUI)

{

pCmdUI->Enable(TRUE);

}

 

От і все. Залишилося згадати про параметр nlndex функції SetPaneText. Річ у тому, що передаване в нім значення повинне враховувати і панелі-роздільники (separator pane). Отже, якщо викликати функцію SetPaneText приведеним нижче чином, то при перегляді користувачем пункту меню текст поля буде замінений текстом підказки цього пункту меню.

 

m wndStatusBar.SetPaneText(0, strUserld);




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 351; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.