- •История Windows
- •Windows 1.0
- •Windows 1.3
- •Windows 2.0
- •Windows 3.0
- •Windows 3.1
- •Windows for Workgroups версии 3.11
- •Windows NT
- •Windows 95
- •Windows NT Workstation 4.0 и Windows NT Server 4.0
- •Windows NT 4.0 Server Enterprise Edition
- •Windows 98
- •Windows 98 Second Edition (SE)
- •Windows 2000
- •Windows 98 Millenium Edition (ME)
- •Windows XP
- •Общая архитектура WINDOWS приложения.
- •Каркас приложения
- •Регистрация класса окна
- •Создание окна.
- •Отображение окна.
- •Цикл обработки очереди сообщений.
- •WndProc
- •Обработка сообщений типового приложения.
- •Контрольные вопросы
- •Сообщения
- •Типы сообщений
- •Обработка клавиатурных сообщений
- •Обработка сообщений от мыши
- •Сообщения таймера
- •Контрольные вопросы
- •Организация ввода
- •Разупорядоченный ввод
- •Разделение потоками виртуальных очередей ввода
- •Локальное состояние ввода
- •Ввод с клавиатуры и фокус
- •Управление курсором мыши
- •Контрольные вопросы
- •Окна
- •Окна Windows
- •Иерархия окон
- •Оконная процедура, стандартные оконные процедуры
- •Стиль класса окна
- •Стили окон, окна основных стилей
- •Перекрывающиеся окна
- •Временные окна
- •Дочерние окна
- •Сообщения управления окнами
- •Окна с полосами прокрутки
- •Системные метрики
- •Определение размера окна
- •Определение расположения окна
- •Контрольные вопросы
- •Графический интерфейс устройств(GDI).
- •Создание (получение) контекста устройств.
- •Сохранение контекста устройства.
- •Прямые (отрезки) и кривые
- •Закрашенные области
- •Битовые шаблоны (растровые шаблоны, растровые образы)
- •Текст и шрифты
- •Режимы масштабирования и преобразования
- •Метафайл
- •Регионы
- •Путь
- •Палитры
- •Контрольные вопросы
- •Объекты ядра
- •Что такое объект ядра
- •Учет пользователей объектов ядра
- •Защита
- •Таблица описателей объектов ядра
- •Создание объекта ядра
- •Закрытие объекта ядра
- •Синхронизация объектов
- •Именованные объекты
- •Дублирование описателей объектов
- •Изменение флагов описателя
- •Синхронизация потоков
- •Критическая секция
- •Мьютексы
- •Семафоры
- •События
- •Ожидаемые таймеры
- •Контрольные вопросы
- •Ресурсы Windows приложения
- •Файлы ресурсов приложения
- •Значки (пиктограммы)
- •Курсоры
- •Битовые образы
- •Символьные строки
- •Ресурсы, определяемые пользователем
- •Таблица акселераторов
- •Меню
- •Диалоговые окна
- •Контрольные вопросы
- •Элементы управления
- •Дочерние окна управления
- •Создание дочерних окон
- •Сообщения дочерних окон родительскому окну
- •Сообщения родительского окна дочерним окнам
- •Дочерние окна и фокус ввода
- •Дочерние окна управления и цвет
- •Кнопки различных стилей (класс BUTTON)
- •Нажимаемые кнопки
- •Флажки-переключатели
- •Переключатели
- •Окна групп
- •Кнопки, определяемые пользователем
- •Статические поля (класс static)
- •Текстовые редакторы (класс edit)
- •Списки разных стилей (класс listbox)
- •Комбинированные списки (класс combobox)
- •Полосы прокрутки (класс scrollbar)
- •Контрольные вопросы
- •Расширенные элементы управления
- •Основы общих элементов управления
- •Инициализация библиотеки элементов общего пользования
- •Создание элементов управления общего пользования
- •Посылка сообщений общим элементам управления
- •Уведомляющие сообщения от общих элементов управления
- •Контрольные вопросы
- •Стандартные диалоговые окна.
- •Окна сообщений
- •Диалоговые окна общего пользования
- •Контрольные вопросы
- •Динамически подключаемые библиотеки
- •Создание DLL
- •Проецирование DLL на адресное пространство процесса
- •Функция входа/выхода
- •Функция DllMain и стандартная библиотека С
- •Функция LibEntry
- •Функция LibMain
- •Функция WEP
- •Экспорт функций и переменных из DLL
- •Импорт функций и переменных из DLL
- •Заголовочный файл DLL
- •Разделы в ЕХЕ- и DLL-файлах
- •Контрольные вопросы
- •Файлы, проецируемые в память
- •Контрольные вопросы
- •Классы, определяющие архитектуру приложения
- •Классы приложения и поддержки потоков
- •Классы приложения и потоков
- •Классы фреймов окон
- •Получение информации о приложении
- •Соглашения об именах MFC
- •Включаемые файлы
- •Функция WinMain
- •Класс CWinApp
- •Класс CWnd
- •Класс CFrameWnd
- •Создание главного окна SDI-приложения
- •Примечание
- •Создание главного окна SDI-приложения
- •Создание дочерних окон
- •Ограничение размеров окна
- •Ограничение доступа к окну
- •Создание многодокументных приложений
- •Класс CMDIChildWnd
- •MDI — пример приложения
- •Категории сообщений
- •Карта сообщений
- •Компоненты карты сообщений
- •Класс CCmdTarget
- •Стандартный маршрут команды
- •Команды обновления и класс CCmdlll
- •Функции для работы с сообщениями
- •Основные положения
- •Класс CDocTemplate
- •Класс CSingleDocTemplate
- •Роль фреймов в архитектуре "документ/представление"
- •Документ и его представления
- •Документы
- •Класс CDocument
- •Класс CArchive
- •Представления
- •Класс CView
- •Панели элементов управления
- •Класс CStatusBar
- •Класс CStatusBarCtrl
- •Класс CDialogBar
- •ControlBars — пример приложения
- •НЕКОТОРЫЕ КЛАССЫ MFC
- •Класс CObject - основной класс MFC
- •Конструкторы класса
- •Оператор присваивания
- •Диагностика
- •Проверка целостности объектов класса
- •Получение дампа объекта класса
- •Сохранение и восстановление состояния объекта
- •Метод IsSerializable
- •Виртуальный метод Serialize
- •Информация о классе
- •Виртуальный метод GetRuntimeClass
- •Метод IsKindOf
- •Класс CPoint - точка на плоскости
- •Класс CSize - относительные координаты
- •Класс CString - текстовые строки
- •Конструктор класса
- •Коллекции
- •Массивы - шаблон CArray
- •Списки - шаблон CList
- •Словари - шаблон CMap
- •Класс CTime - дата и время
- •Файловая система - класс CFile
- •Открытие и создание файлов
- •Идентификатор открытого файла
- •Закрытие файлов
- •Чтение и запись файлов
- •Метод Flush
- •Операции с файлами
- •Блокировка
- •Позиционирование
- •Характеристики открытого файла
- •Файловая система - классы CMemFile и CStdioFile
- •Модификация класса CMemFile
- •Файловая система - класс CStdioFile
- •Запись и восстановление объектов
- •Запись в архивный файл
- •Чтение из архивного файла
- •Исключения - класс CException
- •Класс CException
- •Класс CMemoryException
- •Класс CFileException
- •Приложение Except
- •Класс CArchiveException
- •Класс CNotSupportedException
- •Класс CResourceException
- •Класс CUserException
Классы фреймов окон
Вархитектуре документ/представление фреймы окон являются окнами, которые содержат представления. Они также поддерживают панели элементов управления, присоединенные к ним.
Вприложениях с многодокументным интерфейсом главное окно является производным от CMDIFrameWnd, которое содержит фреймы документов, являющихся объектами CMDIChildWnd.
Вприложениях с однодокументным интерфейсом главное окно является производным от CFrameWndn содержит представление текущего документа.
CFrameWnd базовыйклассдляглавногоокнаоднодокументногоинтерфейса; крометого, являетсябазовымдлявсехдругихклассовфреймовокон
CMDIFrameWnd базовый класс для главного окна многодокументного интерфейса CMDIChildWnd базовый класс для окна документа многодокументного интерфейса
CMiniFrameWnd окно с заголовком половинной высоты, обычно показывающее границу плавающейпанелиинструментов
COIelPFrameWnd предоставляет окно для представления, когда документ-сервер редактируется по месту; см. "Серверные классы OLE"
Получение информации о приложении
Когда вы пишете приложение с использованием классов MFC, вы создаете единственный объект, производный от CWinApp. Для получения информации об этом объекте и связанных с ним параметрах из любого места программы разработчики предоставили следующие функции:
CWinApp* AfxGetAppO -
возвращает указатель на единственный объект CWinApp приложения.
LPCTSTR AfxGetAppNameO -
возвращаетстроку, заканчивающуюсянулем, содержащуюимяприложения.
HINSTANCE AfxGetlnstanceHandleO -
возвращает дескриптор текущего приложения для исполняемого файла (.ЕХЕ); в случае, если она вызвана из динамически подключаемой библиотеки, связанной с USRDLL-версией MFC, то возвращается HINSTANCE этой библиотеки DLL.
CWnd* AfxGetMainWndO -
возвращает значение переменной m_pMainWnd объекта приложения, если оно не является сервером OLE, или указатель на активное главное окно приложения впротивномслучае.
HINSTANCE AfxGetResourceHandleO -
возвращаетдескрипторзагруженныхпоумолчаниюресурсовприложения
void AfxSetResourceHandle(HINSTANCE hlnstResource) -
устанавливает дескриптор экземпляра приложения или модуля .ЕХЕ или .DLL, изкоторого будутзагруженыресурсыприложения.
LPCTSTR AFXAPI AfxRegisterWndClass( DINT nClassStyle,
HCURSOR hCursor = 0, HBRUSH hbrBackground = 0, HICON hlcon = 0) -
возвращаетстроку, заканчивающуюсянулем, котораясодержитимязарегистрированного класса. В качестве параметров в эту функцию передаются: nClassStyle — стиль или комбинация стилей класса окна Windows, которые будут рассмотрены при описании регистрации класса окна, hCursor — дескриптор ресурса курсора, hbrBackground — дескриптор ресурса кисти, определяющей цвет фона, hlcon — дескриптор ресурса пиктограммы.
BOOL AFXAPI AfxRegisterClass(WNDCLASS* IpWndClass) -
возвращает значение TRUE при успешной регистрации класса окна и FALSE приошибке. В качестве параметра в функцию передается указатель на структуру WNDCLASS, которая
должна содержать информацию, необходимую для успешнойрегистрации. Прииспользовании этой функции для регистрации класса окна в модуле DLL следует иметь в виду, что имя зарегистрированного класса автоматически удаляется из системы, когда библиотека выгружаетсяизпамяти.
HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR IpszModuleName) -
загружает в память модуль (файл .DLL или .ЕХЕ), имя которого передается в качестве параметра IpszModuleName. Если загрузка прошла успешно, то возвращается дескриптор модуляиувеличиваетсясчетчикссылокдляэтойбиблиотеки; в противном случае возвращается
NULL.
BOOL AFXAPI AfxFreeLibrary(HINSTANCE hlnstLib) -
уменьшает счетчик ссылок для загруженного модуля DLL, определяемого параметром hlnstLib. Когда счетчик ссылок становится равным нулю, модуль выгружаетсяизадресного пространстватекущегопроцесса.
Основные составляющие приложения на базе библиотеки классов MFC
Цель этой главы — проанализировать общую структуру программы для Windows, написанной с использованием тех возможностей, которые предоставляет библиотека классов MFC, и показать тесную взаимосвязь между классами библиотеки и интерфейсом прикладного программирования
Win32 API.
Начнем с рассмотрения полного текста первого минимального приложения First, создающего простое окно с заголовком, бордюром и системным меню.
////////////////////////////////////////////у////////////
// Файл First.h
/1111! 11111111111111 /111111111111111111111111111111111111
#ifndef _____ AFXWIN_H_
terror сначала надо включить 'stdafx.h' для поддержки РСН #endif
class CFirstApp : public CWinApp
(
public:
CFirstApp();
//Переопределяемые функции
//{{AFX_VIRTUAL(CFirstApp) public:
virtual BOOL Initlnstance (); //}}AFX_VIRTUAL };
1 1 1 1 1 1 1 1 1 1 1 1 1 1 / 1 1 1 1 1 / 1 / 1 1 1 1 1 1 1 1 1 / 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I/ Файл First.cpp
// Copyright (c) 1997 Мешков А., Тихомиров Ю.
111 /11111 /111111111111111! 1111111111111111111111111111111 tinclude "stdafx.h"
tinclude "First. h" tinclude "MainFrm.h"
//CFirstApp CFirstApp::CFirstApp()
//Может бытьсозданодин итолько одинобъект CFirstApp CFirstApp theApp;
//ИнициализацияобъектаCFirstApp BOOL CFirstApp: : Initlnstance () {
const char *szWndClass = Af xRegisterWndClass ( CS_HREDRAW | CS_HREDRAW, LoadStandardCursor (IDC_ARROW) , (HBRUSH)COLOR_BACKGROUND + 1, Loadlcon(IDR_MAINFRAME));
CMainFrame *pWnd = new CMainFrame;
pWnd->CreateEx( |
|
О, |
// дополнительные стили |
szWndClass, |
// классокна |
"Перваяпрограмма", |
// заголовок |
WS_OVERLAPPEDWINDOW, |
// стиль |
CWJJSEDEFAULT, CW_USE DEFAULT, |
// левыйверхнийугол(х, у) |
CWJJSEDEFAULT, CW_USEDEFAULT, |
// размеры(сх, су) |
NULL, |
// родительское окно |
NULL); |
// идентификатор меню |
pWnd->ShowWindow(m_nCmdShow) ; |
|
m_pMainWnd = pWnd; |
|
return TRUE; |
|
///////////////////////I/////////////////////////////////
II Файл MainFrm.h
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 / 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
class CMainFrame : public CWnd
{
public:
CMainFrame();
public:
virtual ~CMainFrame();
1 1 1 1 1 1 1 1 / 1 1 1 / 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 // Файл MainFrm.cpp
I / / / I I I I / I I / ПI I / I I I I I I I I I I I I I I I I / I I I I I I I I I I I I I I I I I I I I I I I
#include "stdafx.h" #include "First.h" finclude "MainFrm.h"
// Конструктор/деструкторCMainFrame CMainFrame::CMainFrame()
CMainFrame::-CMainFrame()
11/11/III//III/11111/IIIIIIII/II//1/II/I/11/1/II111IIIIII /I ФайлStdafx.h
//Copyright (c) 1997 МешковА., ТихомировКЗ.
I 11/11/11111111//11111/1/111111/11111111111111/11111/1111
II stdafx.h : заголовочныйфайл, подключающийстандартные,
//наиболее часто используемые заголовочные файлы
#define VC_EXTRALEAN // Исключаетредкоиспользуемыечасти
// заголовочныхфайловWindows f include <afxwin.h> // СердцевинаMFC истандартныекомпоненты
I 111111111111111111/1111111111111111/111111111/1111111111
IIФайлStdafx.cpp
//Copyright (с) 1997 МешковА. , ТихомировЮ.
111111111111111111111111111111111111111111111111111111111
11stdafx.cpp : исходный файл, который подключает только
//стандартные включаемые файлы
//First. pch : файлпрекомпилированныхзаголовков
//stdafx.obj : файл, содержащий прекомпилированные типы информации
#include "stdafx.h"
//ФайлResource. h
//Copyright (с) 1997 Мешков А., Тихомиров Ю.
111111111111111/1111111111111111/1111111/11111111111/1111
//( {NO_DEPENDENCIES} }
//Microsoft Developer Studio generated include file.
//Used by Template. re
//
// Next default values for new objects
