Александр Фролов - 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 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Для создания и изменения таблиц акселераторов следует использовать редактор ресурсов Microsoft Visual C++. Он позволяет определить соответствие комбинаций клавиш и идентификаторов командных сообщений (рис. 3.3).

Рис. 3.3. Редактор таблицы клавиш ускорения
Для приложений имеющих оконный интерфейс, и созданных с использованием MFC AppWizard, таблица акселераторов создается автоматически. Таблица акселераторов загружается приложением, во время создания главного окна приложения методом LoadFrame. Мы уже рассматривали этот метод, который также используется для загрузки меню и ряда других ресурсов:
// Создаем главное окно многооконного приложения
CMainFrame* pMainFrame = new CMainFrame;
// Загружаем ресурсы с идентификатором IDR_MAINFRAME,
// в том числе и таблицу акселераторов
if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) return FALSE;
Для многооконных приложений каждый тип документа может иметь собственную таблицу акселераторов. Эта таблица будет загружена автоматически вместе с меню (и некоторыми другими ресурсами), когда пользователь откроет окно просмотра документа данного типа.
Чтобы определить таблицу акселераторов для документов данного типа, надо просто включить ее в файл ресурсов приложения, присвоив ей идентификатор данного типа документов:
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_MULTITYPE, RUNTIME_CLASS(CMultiDoc), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CMultiView));
AddDocTemplate(pDocTemplate);
Если приложение создается без использования средств MFC AppWizard и модели документ – окно просмотра, вы можете загрузить таблицу акселераторов, с помощью метода LoadAccelTable , входящего в состав класса CFrameWnd:
BOOL LoadAccelTable(LPCTSTR lpszResourceName);
В качестве параметра lpszResourceName следует указать имя ресурса таблицы акселераторов. Если таблица акселераторов вместо строкового имени имеет числовой идентификатор, то вы должны воспользоваться макрокомандой MAKEINTRESOURCE.
Как и многие другие методы классов MFC, метод LoadAccelTable возвращает в случае успешного завершения ненулевое значение и нуль в случае ошибки. Ошибка во время загрузки таблицы акселераторов может случиться, если вы неправильно укажите идентификатор (или имя) ресурса таблицы.
Приложение MultiMenu
Создайте новый проект под названием MultiMenu. В качестве типа приложения выберите из списка Type строку Application. Настройте проект MultiMenu, указав что приложение будет работать с библиотекой классов MFC.
Наберите в редакторе исходный текст приложения и сохраните его в файле MultiMenu.cpp (листинг 3.1). Включите готовый файл MultiMenu.cpp в проект.
//============================================================
// Приложение MultiMenu
// (c) Frolov G.V., 1996
// E-mail: frolov@glas.apc.org
//============================================================
// Включаемые файлы для MFC
#include
#include
#include
// Включаемый файл для ресурсов приложения и идентификаторов
#include "resource.h"
//============================================================
// Класс CMultiMenuApp – главный класс приложения
//============================================================
class CMultiMenuApp : public CWinApp {
public:
// Мы будем переопределять метод InitInstance,
// предназначенный для инициализации приложения
virtual BOOL InitInstance();
};
// Создаем объект приложение класса CMultiMenuApp
CMultiMenuApp MultiMenuApp;
//============================================================
// Класс CMultiMenuWindow – представляет главное окно
//============================================================
class CMultiMenuWindow : public CFrameWnd {
protected:
// Панель состояния
CStatusBar m_wndStatusBar ;
// Флаг управляет строкой Prosess меню Mission
BOOL bEnable;
// Флаг управляет строкой Construction меню Mission
BOOL bRadio;
// Флаг управляет строкой Restrict меню Menu
int nCheck;
protected:
// Метод для создания окна приложения и панели состояния
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
// Методы для обработки командных сообщений
// от меню приложения
afx_msg void CMultiMenuWindow::OnDisable();
afx_msg void CMultiMenuWindow::OnCommand();
afx_msg void CMultiMenuWindow::OnExit();
afx_msg void CMultiMenuWindow::OnConstruct();
afx_msg void CMultiMenuWindow::OnRestrictMenu();
afx_msg void CMultiMenuWindow::OnFullMenu();
// Методы для обновления меню
afx_msg void OnUpdateProcess(CCmdUI* pCmdUI);
afx_msg void OnUpdateConstruct(CCmdUI* pCmdUI);
afx_msg void OnUpdateDisable(CCmdUI* pCmdUI);
public:
// Конструктор класса CMultiMenuWindow
CMultiMenuWindow();
// Макрокоманда необходима, так как класс
// CMultiMenuWindow обрабатывает сообщения
DECLARE_MESSAGE_MAP()
};
//============================================================
// Таблица сообщений класса CMultiMenuWindow
//============================================================
BEGIN_MESSAGE_MAP(CMultiMenuWindow, CFrameWnd)
// Макрокоманда вызывает метод 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) {
Интервал:
Закладка: