Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Управление строкой состояния




Индикатор состояния

Строка сообщений

В этой секции показывается строка, задаваемая (динамически) программой. Чтобы задать выводимый текст, сначала получите доступ к объекту строки состояния, после чего вызовите функцию CStatusBar::SetPaneText(), передав ей индекс секции. Индексы начинаются с 0; нулевая секция — крайняя слева, секция 1 размещается правее и т. д.

Приведенный ниже фрагмент кода входит в функцию-член класса «вид». Обратите внимание: здесь приходится сначала подниматься на уровень приложения, а потом возвращаться к основному окну-рамке:

CMainFrame* pFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd;

CStatusBar* pStatus = &pFrame->m_wndStatusBar;

pStatus->SetPaneText(0, " строка сообщения для первой секции");

 

Обычно длина секции сообщений составляет ровно четверть ширины экрана. Однако у первой секции длина переменная: она не менее четверти ширины экрана и может быть увеличена, если в строке состояния есть место.

 

В секции этого индикатора отображаются, по умолчанию, состояния клавиш CapsLock, NumLock и ScrollLock. Эта секция связана с единственной строкой ресурса, которая показывается или скрывается в соответствии с логикой функции-обработчика. Индикатор обозначается идентификатором строкового ресурса и этот же идентификатор применяется для распределения сообщений обновления интерфейса. Индикатор CapsLock обрабатывается в классе окна-рамки при помощи приведенных ниже элемента таблицы сообщений и функции-обработчика. Функция Enable() включает индикатор, если активен режим CapsLock:

ON_UPDATE_COMMAND_UI(ID_INDICATOR_CAPS, OnUpdateKeyCapsLock)

void CMainFrame::OnUpdateKeyCapsLock(CCmdUI* pCmdUI)

{

pCmdUI->Enable(::GetKeyState(VK_CAPITAL) & 1);

}

 

Функции, обновляющие пользовательский интерфейс, вызываются в цикле простоя приложения (idle), поэтому строка состояния обновляется всякий раз, когда приложение получает сообщения. Длина секции индикатора равна длине соответствующей строки из ресурса.

 

Стандартной строке состояния присваивается идентификатор дочернего окна AFX_IDW_STATUS_BAR. Именно его каркас приложений ищет для вывода подсказки по элементам меню. Обработчики сообщений обновления пользовательского интерфейса используют три идентификатора строковых ресурсов для индикаторов состояния клавиатуры в базовом классе окна-рамки: ID_INDICATOR_CAPS, ID_INDICATOR_NUM и ID_INDICATOR_SCRL. Чтобы самому управлять строкой состояния, нужно применить другой идентификатор дочернего окна и другие константы для индикаторов.

Примечание. Изменять идентификатор дочернего окна строки состояния имеет смысл только в том случае, если Вы хотите предотвратить вывод каркасом приложений подсказок в секцию 0.

 

Идентификатор для окна строки состояния назначается вызовом CStatusBar::Create() в функции-члене OnCreate() производного класса окна-рамки. Эта функция содержится в файле MainFrm.cpp, генерируемом мастером. Третий параметр функции Create() – идентификатор окна – по умолчанию равен AFX_IDW_STATUS_BAR.

Чтобы назначить свой идентификатор, замените вызов

m_wndStatusBar.Create(this);

на

m_wndStatusBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM,

ID_MY_STATUS_BAR);

 

Конечно, нужно определить и константу ID_MY_STATUS_BAR в файле resource.h, используя редактор символов. (Предполагается, что пока Вы не изменяете программный код, а просто наматываете информацию на свой ус.)

Но Вы кое-что забыли. Стандартное меню View, формируемое каркасом приложений, позволяет включать и отключать показ строки состояния. Эта логика реализуется кодом, использующим идентификатор окна AFX_IDW_STATUS_BAR, который тоже придется изменить. В своем производном классе окна-рамки напишите элементы таблицы сообщений и обработчики для команды ID_VIEW_STATUS_BAR и сообщений, связанных с обновлением пользовательского интерфейса. ID_VIEW_STATUS_BAR – это идентификатор элемента меню Status Bar. Как Вы будете лицезреть ниже, обработчики в производном классе переопределяют стандартные обработчики из базового класса.




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


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


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



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




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