Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

MFC- Работа с панелями состояния

Posted on 28 ноября, 2014 by admin

Здорова ребятки! Сегодня попробуем разобрать такую штуку как панели состояния в MFC, как их создавать и что это такое. По умолчанию панель состояния расположена в нижней части окна приложения

MFC statusbarкак видите панель состояния на рисунке состоит из четырех секций Готово, CAP,NUM и SCRL. В панели состояния можно вывести то, что мастер Application Wizard предлагает по умолчанию, но вам нужен доступ к переменной m_wndStatusBar объекта CMainFrame, которая предоставляет эту панель. Давайте для начала создадим само приложение, а то я наперед забежал. И так создаем самое простейшее MDI приложение как на рисунке ниже

MFC app-statusbarэто самое простое приложение и там мы видим какая создалась панель по умолчанию. Мы ее трогать не будем, а будем создавать еще одну панель для дочерних классов фрейма CChildFrame. Первое добавляем открытую переменную типа CMFCStatusBar m_StatusBar в класс CChildFrame который отвечает за создание окна для представлений

1
2
3
public:
// Объект панели состояния
CMFCStatusBar m_StatusBar;

 

Дальше идем в окно ресурсов, выбираем таблицу stringtable

MFC stringtableВыбираем ее и добавляем идентификатор ID_STATUS и значение его «Value : 1«, на рисунке ниже после добавления у вас оно должно появится в таблице

MFC statusbar-idvalue

Идем дальше, нам нужно инициализировать переменную m_StatusBar непосредственно перед тем как отобразится окно видимого представления. Поэтому с помощью окна свойств класса CChildFrame добавьте в класс функцию, которая будет вызываться в ответ на сообщение WM_CREATE, отправленное приложению при создании окна. Просто выберим класс CChildFrame, перейдем в его свойства и выберем из списка сообщение WM_CREATE и добавим его обработчик как на рисунке ниже

MFC WM_CREATEПосле выбора <Add> OnCreate у вас появится функция обработчик OnCreate и добавьте в нее код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWndEx::OnCreate(lpCreateStruct) == -1)
return -1;
 
//Создать панель состояния
m_StatusBar.Create(this);
static UINT indicators[]={ID_STATUS};//создание массива индикаторов
m_StatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT));//инициализация массива индикаторов
m_StatusBar.SetPaneStyle(0,SBPS_STRETCH);//растянуть первую панель
 
return 0;
}

Компилируйте запускайте и у вас в окна обрамления вида появилась панель состояния

MFC statusbarimgФункция SetPaneStyle задает стили для панели в таблице ниже вы можете их увидеть какие еще существуют

Стили панели состояния »

Код стиля Внешний вид
SBPS_NORMAL Не установлено никаких стилей растяжения, границ или возникновения
SBPS_POPOUT Текст имеет границу, которая выглядит выступающей над поверхностью панели состояния
SBPS_NOBORDERS Текст отображается без границ
SBPS_DISABLED Текст в панели не отображается

Если хотите добавить в строку состояния несколько панелей, разделите их, включив символ ID_SEPARATOR между символами в массиве индикаторов.  Приведем примерчик, только добавим еще один элемент в таблицу  String Table который будет назваться ID_STATUS1 и иметь значение value1 : 1

MFC String Table status

И изменим функцию обработчик события WM_CREATE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIChildWndEx::OnCreate(lpCreateStruct) == -1)
return -1;
 
//Создать панель состояния
m_StatusBar.Create(this);
static UINT indicators[]={ID_STATUS,ID_SEPARATOR,ID_STATUS1};//создание массива индикаторов
m_StatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT));//инициализация массива индикаторов
m_StatusBar.SetPaneStyle(0,SBPS_STRETCH);//растянуть первую панель
 
return 0;
}

все компилируем запускаем и у нас уже две секции в панели инструментов.

MFC String Table da

Теперь давайте заставим эти секции работать, для этого нам нужно добавить в классе вида, зайдите в Окно классов и щелкните правой клавишей мышки по классу CTestStatusBarView

MFC class window

Вы попадете в мастер классов

MFC class wisordвыберите наш идентификатор ID_STATUS, выберите UPDATE_COMMAND_UI и нажмите кнопку добавить обработчик и у вас появится окошко

MFC onUpdateStatusнажимайте Ок  и в самом мастере классов MFC нажмите Ок и у вас создастся пустой обработчик OnUpdateStatus, добавим в него следующий код

1
2
3
4
5
6
7
void CTestStatusBarView::OnUpdateStatus(CCmdUI *pCmdUI)
{
pCmdUI->Enable();
CString status;
status.Format(_T(" Value : %d"),m_value);
pCmdUI->SetText(status);
}

Добавьте переменную в класс вида типа int и названия m_value

1
2
// хранит значение статуса
int m_value;

Добавим новый пункт меню в котором будут несколько подпунктов изменяющие данный статус на соответствующие значения, как на рисунке ниже

MFC statusbarмы создали пункт status и четыре подпункта, так же я создал пункт status 1 и там так же 4 подпункта, но они пока нам не нужны, нам нужны пока пункт status со своими четырмя подпунктами, для них создаем обработчики событий которые представлены ниже

Показать »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void CTestStatusBarView::OnStatus1()
{
m_value=1;
}
 
 
void CTestStatusBarView::OnStatus2()
{
m_value=2;
}
 
 
void CTestStatusBarView::OnStatus3()
{
m_value=3;
}
 
 
void CTestStatusBarView::OnStatus4()
{
m_value=4;
}

Компилируем и запускаем и у нас уже когда мы выбираем пункт меню допустим 3 и статус бар меняется на 3 как на рисунке ниже

MFC statusbar 3

Так же само по подобному принципу создаем обновление и для второй секции, начинаем с обработчика в классе вида, только уже выбираем идентификатор ID_STATUS1 как на скрине ниже и создаем обработчик

MFC class withord 111Нажимаем кнопку добавить обработчик и нажимаем Ок и затем уже в мастере классов так же Ок и у нас создается функция обработчик OnUpdateStatus1

1
2
3
4
5
6
7
void CTestStatusBarView::OnUpdateStatus1(CCmdUI *pCmdUI)
{
pCmdUI->Enable();
CString status;
status.Format(_T(" Value : %d"),m_value2);
pCmdUI->SetText(status);
}

так же добавим в класс вида переменную m_value2 и обработчики для пункта меню status2 как и в первом случае такие же

Показать »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void CTestStatusBarView::OnStatus11()
{
m_value2=1;
}
 
 
void CTestStatusBarView::OnStatus12()
{
m_value2=2;
}
 
 
void CTestStatusBarView::OnStatus13()
{
m_value2=3;
}
 
 
void CTestStatusBarView::OnStatus14()
{
m_value2=4;
}

компилируем запуск и при выборе меню status1 и пункта 4 у нас действительно уже изменяется идентификатор второй для строки состояния ка на рисунке ниже.

MFC status bar 444

[youtube]https://www.youtube.com/watch?v=oq-_uDuBHwU[/youtube]

 

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • JavaScript (1)
  • linux (1)
  • MFC (39)
  • node.js (2)
  • React (3)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (29)

Метки

Ajax bootstrap CentOS CLI expressjs FormData GDlib google Invisible reCAPTCHA JWT media MFC php react-router-dom redux repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • RA3PKJ к записи visual C++, создание диалоговых окон.
  • JasonReant к записи Создание и использование статических библиотек .lib в visual studio.
  • MyWin2020 к записи Программка для заполнения форума на vBulletin 3.8.7
  • ScottJip к записи Создание и использование статических библиотек .lib в visual studio.
  • ArnoldKig к записи Создание и использование статических библиотек .lib в visual studio.
©2021 Kselax.ru Theme by ThemeGiant