KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Александр Фролов - Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2

Александр Фролов - Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн "Александр Фролов - Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2". Жанр: Программирование издательство -, год -.
Перейти на страницу:

 // который используется методом OnUpdateTEXT

 bIndicatorTEXT = !bIndicatorTEXT;

}


//============================================================

// Метод OnMenuExit класса CStateWindow

//============================================================

void CStateWindow::OnMenuExit() {

 // Завершаем приложение

 DestroyWindow();

 return;

}


//============================================================

// Метод OnCreate класса CStateWindow

// Вызывается во время создания окна приложения

//============================================================

int CStateWindow::OnCreate(LPCREATESTRUCT lpCreateStruct) {

 // Вызываем метод OnCreate базового класса

 if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;


 // Создаем панель состояния

 if (!m_wndStatusBar.Create(this)) {

  // Ошибка при создании панели состояния

  TRACE0("Failed to create status barn");

  return -1;  

 }


 // Отображаем индикаторы панели состояния

 if (!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) {

  // Ошибка при установке индикаторов

  TRACE0("Failed to set indicatorsn");

  return -1;  

 }


 // Устанавливаем характеристики индикатора

 // ID_INDICATOR_PROGRESS

 m_wndStatusBar.SetPaneInfo(m_wndStatusBar.CommandToIndex(ID_INDICATOR_PROGRESS), ID_INDICATOR_PROGRESS,

SBPS_DISABLED | // Текст не отображается

  SBPS_NOBORDERS, // Рамка вокруг индикатора отсутствует

  150);           // Ширина индикатора 150 пикселов


 return 0;

}


//============================================================

// Метод OnUpdateTEXT класса CStateWindow

// Обрабатывает сообщение ON_UPDATE_COMMAND_UI

// от индикатора ID_INDICATOR_TEXT

//============================================================

void CStateWindow::OnUpdateTEXT(CCmdUI* pCmdUI) {

 // В зависимости от состояния флага bIndicatorTEXT

 // отображаем в индикаторе ID_INDICATOR_TEXT

 // строку TEXT или PIC

 if (bIndicatorTEXT) pCmdUI->SetText("TEXT"); // отображаем строку TEXT

 else pCmdUI->SetText("PIC"); // отображаем строку PIC


 // Разрешаем отображение текста в индикаторе

 pCmdUI->Enable();

}

Создайте новый файл ресурсов и включите его в проект под именем Status.rc. Включите в него меню, присвоив ему идентификатор IDR_MENU. Введите строки меню IDR_MENU в соответствии с представленным нами файлом ресурсов (листинг 3.14). Для всех строк меню введите их описания. Они будут записаны в файл ресурсов как строковые ресурсы, имеющие одинаковые идентификаторы со строками меню.

Добавьте в файл ресурсов строку Ready, выбрав для нее идентификатор AFX_IDS_IDLEMESSAGE. Эта строка будет отображаться в панели состояния во время “бездействия” приложения.

Добавьте в файл ресурсов строки, представляющие индикаторы панели состояния: ID_INDICATOR_ADD, ID_INDICATOR_PROGRESS и ID_INDICATOR_TEXT.

Листинг 3.14. Файл Status.rc

//Microsoft Developer Studio generated resource script.

//

#include "resource.h"


#define APSTUDIO_READONLY_SYMBOLS

//////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 2 resource.

//

#include "afxres.h"


//////////////////////////////////////////////////////////////

#undef APSTUDIO_READONLY_SYMBOLS


//////////////////////////////////////////////////////////////

// Russian resources


#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)

#ifdef _WIN32

LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT

#pragma code_page(1251)

#endif //_WIN32


#ifdef APSTUDIO_INVOKED

//////////////////////////////////////////////////////////////

//

// TEXTINCLUDE

//


1 TEXTINCLUDE DISCARDABLE

BEGIN

 "resource.h"

END


2 TEXTINCLUDE DISCARDABLE

BEGIN

 "#include ""afxres.h""rn"

 ""

END


3 TEXTINCLUDE DISCARDABLE

BEGIN

 "rn"

 ""

END


#endif // APSTUDIO_INVOKED


//////////////////////////////////////////////////////////////

//

// Menu

//


IDR_MENU MENU DISCARDABLE

BEGIN

 POPUP "Work"

 BEGIN

  MENUITEM "Process",         ID_WORK_PROCESS

  MENUITEM "Direct set ADD",  ID_WORK_DIRECT_ADD

  MENUITEM "Direct set SUB",  ID_WORK_DIRECT_SUB

  MENUITEM "Disable ADD SUB", ID_WORK_DISABLE_ADDSUB

  MENUITEM "Switch TEXT",     ID_WORK_ON_SWITCH_TEXT

  MENUITEM SEPARATOR

  MENUITEM "Exit",            ID_WORK_EXIT

 END

END


//////////////////////////////////////////////////////////////

//

// String Table

//


STRINGTABLE DISCARDABLE

BEGIN

 ID_INDICATOR_ADD "START"

END


STRINGTABLE DISCARDABLE

BEGIN

 ID_INDICATOR_PROGRESS "neve display"

 ID_INDICATOR_TEXT     "TEXT"

END


STRINGTABLE DISCARDABLE

BEGIN

 ID_WORK_PROCESS        "Display and play progress bar"

 ID_WORK_DIRECT_ADD     "Set indicator ID_INDICATOR_ADD to ADD"

 ID_WORK_ON_SWITCH_TEXT "Switch text in indicator ID_INDICATOR_TEXT"

 ID_WORK_DIRECT_SUB     "Set indicator ID_INDICATOR_ADD to SUB"

 ID_WORK_DISABLE_ADDSUB "Disable indicator ID_INDICATOR_ADD"

 ID_WORK_EXIT           "Exit application"

END


STRINGTABLE DISCARDABLE

BEGIN

 AFX_IDS_IDLEMESSAGE "Ready"

END


#endif // Russian resources

//////////////////////////////////////////////////////////////


#ifndef APSTUDIO_INVOKED

//////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 3 resource.

//


//////////////////////////////////////////////////////////////

#endif // not APSTUDIO_INVOKED

Идентификаторы ресурсов приложения Status определены в файле resource.h. Этот файл создается автоматически редактором ресурсов Microsoft Visual C++. Исходный текст файла resource.h представлен в листинге 3.15.

Листинг 3.15. Файл resource.h

//{{NO_DEPENDENCIES}}

// Microsoft Developer Studio generated include file.

// Used by Status.rc

//

#define ID_INDICATOR_ADD       1

#define IDR_MENU               101

#define ID_INDICATOR_PROGRESS  102

#define ID_INDICATOR_TEXT      103

#define ID_WORK_PROCESS        40001

#define ID_WORK_DIRECT_ADD     40006

#define ID_WORK_ON_SWITCH_TEXT 40007

#define ID_WORK_DIRECT_SUB     40008

#define ID_WORK_DISABLE_ADDSUB 40009

#define ID_WORK_EXIT           40010

#define ID_TIMER_CHECK         0xE001


// Next default values for new objects

//

#ifdef APSTUDIO_INVOKED

#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_NEXT_RESOURCE_VALUE 106

#define _APS_NEXT_COMMAND_VALUE  40011

#define _APS_NEXT_CONTROL_VALUE  1000

#define _APS_NEXT_SYMED_VALUE    104

#endif

#endif

Постройте приложение Status и запустите его. На экране появится главное окно приложения, в нижней части которого отображается панель состояния (рис. 3.23).

Рис. 3.23. Приложение Status


В панели состояния расположены несколько индикаторов. Самый первый индикатор, размер которого зависит от размера окна приложения, отображает подсказку о выбранной строке меню приложения или системного меню, а если приложение “бездействует” в нем отображается строка Ready.

Следующий индикатор OVR. В нашем приложении он не действует. Вы сами можете разработать программный код для управления этим индикатором.

Вслед за идентификатором OVR следует свободное пространство, занятое индикатором. Этот индикатор не отображается на панели и предназначен только для резервирования места под линейный индикатор progress bar.

Если вы выберите из меню Work строку Process, то на этом месте появится линейный индикатор, плавно меняющий свое значение. Мы используем линейный индикатор, чтобы отображать ход какого-нибудь длительного процесса.

После того, как линейный индикатор покажет окончание процесса, он будет удален с панели состояния, а в самом первом индикаторе появится надпись Process completed.

Затем в панели состояния следуют три стандартных индикатора CAP, NUM и SCRL, которые отображают текущее состояние клавиш <Caps Lock>, <Num Lock> и <Scroll Lock>.

Следующий индикатор, который мы рассмотрим, называется TEXT. Если вы выберите из меню Work строку Switch TEXT, то надпись TEXT в индикаторе заменится на PIC. Повторный выбор данной строки меню восстановит предыдущее состояние индикатора.

Последний индикатор в панели состояния START. Этот индикатор управляет тремя строками меню Work. При выборе строки Direct set ADD в индикаторе отображается строка ADD, а при выборе строки Direct set SUB – SUB. Во втором случае также меняется оформление индикатора. Если вы выберите из меню Work строку Disable ADD SUB, то индикатор будет заблокирован.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*