Чтение онлайн

ЖАНРЫ

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

Фролов Григорий Вячеславович

Шрифт:

 ID_INDICATOR_CAPS, // Индикатор клавиши <Caps Lock>

 ID_INDICATOR_NUM, // Индикатор клавиши <Num Lock>

 ID_INDICATOR_SCRL, // Индикатор клавиши <Scroll Lock>

 ID_INDICATOR_TEXT, // Индикатор TEXT/PIC

 ID_INDICATOR_ADD, // Индикатор ADD/SUB (начальное

// состояние START)

};

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

// Метод InitInstance
класса CStateApp

// Создает главное окно приложения и отображает его на экране

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

BOOL CStateApp::InitInstance {

 m_pMainWnd = new CStateWindow;

 m_pMainWnd->ShowWindow(m_nCmdShow);

 m_pMainWnd->UpdateWindow;

 return TRUE;

}

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

// Конструктор класса CStateWindow

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

CStateWindow::CStateWindow {

 // Создаем окно приложения, соответствующее

 // данному объекту класса CStateWindow

 Create(NULL, "Status Bar Sample", WS_OVERLAPPEDWINDOW, rectDefault, NULL, MAKEINTRESOURCE(IDR_MENU));

 // Устанавливаем значение флага bIndicatorTEXT

 bIndicatorTEXT = TRUE;

}

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

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

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

void CStateWindow::OnMenuProcessBar {

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

 RECT rectProgress;

 m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(ID_INDICATOR_PROGRESS), &rectProgress);

 // Создаем полосу progress bar. Размещаем ее

 // на месте индикатора ID_INDICATOR_PROGRESS

 CProgressCtrl ctrlProgressBar;

 if (!ctrlProgressBar.Create(WS_CHILD | WS_VISIBLE, rectProgress, &m_wndStatusBar, 1)) {

// Ошибка при создании progress bar

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

return;

 }

 // Устанавливаем границы для progress bar

 ctrlProgressBar.SetRange(0, 100);

 // Устанавливаем шаг приращения для progress bar

 ctrlProgressBar.SetStep(1);

 // Плавно увеличиваем положение progress bar

 for (int i=0; i<100; i++) {

//
Выполняем короткую задержку

Sleep(10);

// Выполняем шаг приращения progress bar

ctrlProgressBar.StepIt;

 }

 // По завершении, отображаем текст в самом первом

 // индикаторе панели состояния

 m_wndStatusBar.SetWindowText("Process completed");

}

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

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

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

BOOL CStateWindow::OnMenuDirectADD_SUB(UINT nID) {

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

 int nIndex = m_wndStatusBar.CommandToIndex(ID_INDICATOR_ADD);

 // Устанавливаем нормальный режим отображения индикатора

 m_wndStatusBar.SetPaneStyle(nIndex, SBPS_NORMAL);

 // Из меню Work выбрана строка Direct set ADD

 if (nID == ID_WORK_DIRECT_ADD) {

// Выводим текст ADD

m_wndStatusBar.SetPaneText(nIndex, "ADD");

 }

 // Из меню Work выбрана строка Direct set SUB

 else if(nID == ID_WORK_DIRECT_SUB) {

// Изменяем внешний вид индикатора

m_wndStatusBar.SetPaneStyle(nIndex, SBPS_POPOUT);

// Выводим текст SUB

m_wndStatusBar.SetPaneText(nIndex, "SUB");

 }

 return TRUE;

}

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

// Метод OnMenuDisableADD_SUB класса OnMenuDisableADD_SUB

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

void CStateWindow::OnMenuDisableADD_SUB {

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

 int nIndex = m_wndStatusBar.CommandToIndex(ID_INDICATOR_ADD);

 // Блокируем индикатор

 m_wndStatusBar.SetPaneStyle(nIndex, SBPS_DISABLED);

}

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

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

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

void CStateWindow::OnMenuSwitchTEXT {

 // Изменяем состояние флага bIndicatorTEXT,

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