Александр Фролов - Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2
- Название:Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2
- Автор:
- Жанр:
- Издательство:Диалог-МИФИ
- Год:1996
- Город:Москва
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Александр Фролов - Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2 краткое содержание
Книга посвящена программированию в среде Microsoft Visual C++ с использованием библиотеки классов MFC. В ней мы расскажем о разработке приложений с многооконным пользовательским интерфейсом, использовании классов MFC для создания меню, панелей управления и состояния. Рассмотрим возможности повторного использования программного кода, предоставляемые Microsoft Visual C++. Отдельную главу книги мы посвятили разработке приложений, взаимодействующих с базами данных через драйвера ODBC.
Книга предназначена для всех, кто интересуется программированием в среде операционных систем Windows 95 и Windows NT версий 3.51 и 4.0.
Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
// Макрокоманда вызывает метод OnCreate
ON_WM_CREATE()
// Макрокоманда вызывает метод OnContextMenu
ON_WM_CONTEXTMENU()
// Макрокоманды для обработки командных сообщений
ON_COMMAND(ID_MENU_DISABLE, OnDisable)
ON_COMMAND(ID_MISSION_CONSTRUCT, OnConstruct)
ON_COMMAND(ID_FILE_EXIT, OnExit)
ON_COMMAND(ID_MISSION_PROCESS, OnCommand)
ON_COMMAND(ID_MENU_RESTRICT, OnRestrictMenu)
ON_COMMAND(ID_MENU_FULL, OnFullMenu)
// Обработчики сообщений ON_UPDATE_COMMAND_UI
ON_UPDATE_COMMAND_UI(ID_MISSION_PROCESS, OnUpdateProcess)
ON_UPDATE_COMMAND_UI(ID_MISSION_CONSTRUCT, OnUpdateConstruct)
ON_UPDATE_COMMAND_UI(ID_MENU_DISABLE, OnUpdateDisable)
END_MESSAGE_MAP()
// Индикатор панели управления
UINT indicator = ID_SEPARATOR;
//============================================================
// Метод InitInstance класса CMultiMenuApp
// Создает главное окно приложения и отображает его на экране
//============================================================
BOOL CMultiMenuApp::InitInstance() {
m_pMainWnd = new CMultiMenuWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
//============================================================
// Конструктор класса CMultiMenuWindow
//============================================================
CMultiMenuWindow::CMultiMenuWindow() {
// Создаем окно приложения, соответствующее
// данному объекту класса CMultiMenuWindow
Create(NULL, "Multi Menu Sample", WS_OVERLAPPEDWINDOW, rectDefault, NULL, MAKEINTRESOURCE(IDR_FULL_MENU));
// Загружаем таблицу клавиш акселерации
LoadAccelTable(MAKEINTRESOURCE(IDR_ACCELERATOR));
// Инициализируем флаги
bEnable = TRUE;
bRadio = TRUE;
nCheck = 0;
}
//============================================================
// Метод OnCreate класса CMultiMenuWindow
// Вызывается во время создания окна приложения
//============================================================
int CMultiMenuWindow::OnCreate(LPCREATESTRUCT lpCreateStruct) {
// Вызываем метод OnCreate базового класса
if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;
// Создаем панель состояния
if (!m_wndStatusBar.Create(this))
{
// Ошибка при создании панели состояния
TRACE0("Failed to create status bar\n");
return -1;
}
// Отображаем индикаторы панели состояния
if (!m_wndStatusBar.SetIndicators(&indicator, 1)) {
// Ошибка при установке индикатора
TRACE0("Failed to set indicators\n");
return -1;
}
return 0;
}
//============================================================
// Метод OnDisable класса CMultiMenuWindow
// Изменяем состояние флагов bEnable и nCheck
//============================================================
void CMultiMenuWindow::OnDisable() {
// Меняем значение bEnable с TRUE на FALSE и наоборот
bEnable = !bEnable;
// Меняем значение bEnable с 1 на 0 и наоборот
nCheck = (nCheck == 1) ? 0 : 1;
}
//============================================================
// Метод OnRestrictMenu класса CMultiMenuWindow
// Изменяем меню приложения с IDR_FULL_MENU на
// IDR_RESTRICT_MENU
//============================================================
void CMultiMenuWindow::OnRestrictMenu() {
CMenu menuOld; // текущее меню
CMenu menuRestrict; // новое меню
CMenu* pMenu;
// Получаем указатель на текущее меню
pMenu = this->GetMenu();
// Связываем меню с объектом menuOld
menuOld.Attach(pMenu->m_hMenu);
// Удаляем меню
menuOld.DestroyMenu();
// Загружаем меню IDR_RESTRICT_MENU
menuRestrict.LoadMenu(IDR_RESTRICT_MENU);
// Устанавливаем загруженное меню
SetMenu(&menuRestrict);
// Разрываем связь меню с объектом menuRestrict
menuRestrict.Detach();
}
//============================================================
// Метод OnFullMenu класса CMultiMenuWindow
// Изменяем меню приложения с IDR_RESTRICT_MENU на
// IDR_FULL_MENU
//============================================================
void CMultiMenuWindow::OnFullMenu() {
CMenu menuOld;
CMenu menuRestrict;
CMenu* pMenu;
pMenu = this->GetMenu();
menuOld.Attach(pMenu->m_hMenu);
menuOld.DestroyMenu();
menuRestrict.LoadMenu(IDR_FULL_MENU);
SetMenu(&menuRestrict);
menuRestrict.Detach();
}
//============================================================
// Метод OnCommand класса CMultiMenuWindow
//============================================================
void CMultiMenuWindow::OnCommand() {
MessageBox("Command not implemented");
}
//============================================================
// Метод OnConstruct класса CMultiMenuWindow
// Изменяем состояние флага bRadio
//============================================================
void CMultiMenuWindow::OnConstruct() {
// Меняем значение bRadio с TRUE на FALSE и наоборот
bRadio = !bRadio;
}
//============================================================
// Метод OnExit класса CMultiMenuWindow
//============================================================
void CMultiMenuWindow::OnExit() {
// Завершаем приложение
DestroyWindow();
return;
}
//============================================================
// Метод OnUpdateProcess класса CMultiMenuWindow
//============================================================
void CMultiMenuWindow::OnUpdateProcess(CCmdUI* pCmdUI) {
// Блокируем или разблокируем строку Process меню Mission
pCmdUI->Enable(bEnable);
}
//============================================================
// Метод OnUpdateConstruct класса CMultiMenuWindow
//============================================================
void CMultiMenuWindow::OnUpdateConstruct(CCmdUI* pCmdUI) {
// Устанавливаем или снимаем пометку
// строки Construction меню Mission
pCmdUI->SetRadio(bRadio);
}
//============================================================
// Метод OnUpdateDisable класса CMultiMenuWindow
//============================================================
void CMultiMenuWindow::OnUpdateDisable(CCmdUI* pCmdUI) {
// Устанавливаем или удаляем пометку
// у строки Disable меню Menu
pCmdUI->SetCheck(nCheck);
}
Создайте новый файл ресурсов и включите его в проект под именем MultiMenu.rc. Включите в него два меню, присвоив им идентификаторы IDR_RESTRICT_MENU и IDR_FULL_MENU.
Введите строки этих меню в соответствии с представленным нами файлом ресурсов (листинг 3.2). Для всех строк меню введите их описания. Они будут записаны в файл ресурсов как строковые ресурсы, имеющие одинаковые идентификаторы со строками меню.
Добавьте в файл ресурсов строку Ready, выбрав для нее идентификатор AFX_IDS_IDLEMESSAGE. Эта строка будет отображаться в панели состояния во время “бездействия” приложения.
Включите в файл ресурсов таблицу акселераторов, состоящую из трех команд: ID_MENU_DISABLE, ID_MISSION_PROCESS и ID_FILE_EXIT. Присвойте им комбинации клавиш , и соответственно.
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by MultiMenu.rc
//
#define IDR_RESTRICT_MENU 106
#define IDR_FULL_MENU 107
#define IDR_ACCELERATOR 108
#define ID_FILE_EXIT 40009
#define ID_MISSION_PROCESS 40013
#define ID_HELP_HELPINDEX 40014
#define ID_HELP_CONTEXTHELP 40015
#define ID_HELP_SYSTEMINFO 40016
#define ID_MISSION_CONSTRUCT 40017
#define ID_MENU_RESTRICT 40019
#define ID_MENU_FULL 40020
Интервал:
Закладка: