- •История 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
26.Какое сообщение приходит окну при нажатии быстрых клавиш? Чем эти сообщения отличаются от аналогичных сообщений от пунктов меню и элементов управления?
27.Является ли диалоговая панель окном Windows? Чем они отличаются от перекрывающихся окон?
28.Какие существуют способы расположения элементов управления на диалоговой панели?
29.Какие шаги следует предпринять для создания диалоговой панели?
30.Какие типы диалоговых панелей существуют? Чем они отличаются друг от друга?
31.Чем отличаются модальные диалоги от системных модальных?
32.Что определяет ресурс шаблона диалога?
33.В каких единицах измерения задаются координаты и размеры элементов управления диалоговой панели?
34.Чему равняются основные единицы диалогового окна?
35.Что такое диалоговая процедура? Является ли она оконной функцией окна диалога?
36.Чем отличается диалоговая процедура от оконной и чем они похожи?
37.Получает ли диалоговая процедура сообщения WM_PAINT, WM_CREATE, WM_DESTROY? Как происходит обработка этих сообщений?
38.Когда в диалоговую процедуру поступает сообщение WM_COMMAND с идентификатором IDCANCEL?
39.Когда в диалоговую процедуру поступает сообщение WM_COMMAND с идентификатором IDOK?
40.Вызовом какой функции создается модальная диалоговая панель?
41.Возвращает ли функция создания модального диалога управление сразу же после вывода диалоговой панели?
42.Что должна сделать диалоговая процедура для того, чтобы модальная диалоговая панель прекратила свою работу?
43.Проходят ли сообщения для модальных диалоговых окон через очередь сообщений приложения?
44.Что следует сделать для всех дочерних окон элементов управления, если к ним необходимо обеспечить доступ с помощью клавиши <Tab>?
45.Что необходимо сделать для обеспечения передачи фокуса от одного переключателя к другому внутри группы?
46.Чем отличается поведение немодального и модального диалоговых окон?
47.Вызовом какой функции создается немодальная диалоговая панель?
48.Возвращает ли функция создания немодального диалога управление сразу же после вывода диалоговой панели?
49.Что необходимо сделать для того, чтобы немодальная диалоговая панель прекратила свою работу?
50.Можно ли прекратить работу немодального диалога функцией EndDialog?
51.Проходят ли сообщения для немодальных диалоговых окон через очередь сообщений приложения?
52.Какие изменения следует внести в цикл обработки сообщений для того, что немодальное диалоговое окно могло получать сообщения, предназначенные для него
Элементы управления
Любое стандартное приложение Windows использует различные элементы управления,
такие, как кнопки, полосы просмотра, редакторы текстов и т.д, реализованные в виде
дочерних окон.


Дочерние окна управления
Дочерние окна располагаются на поверхности окна родителя. Приложение может
создать в любом своем окне несколько элементов управления, которые будут перемещаться вместе с окном-родителем.
•Для этого достаточно создать нужные дочерние окна, указав их размеры, расположение и другие атрибуты. После этого приложение может
взаимодействовать с элементами управления, передавая или получая от них различные сообщения.
Дочернее окно управления обрабатывает сообщения мыши и клавиатуры и извещает родительское окно о том, что состояние дочернего окна изменилось. В этом случае
•Дочернее окно становится для родительского устройством ввода. Оно инкапсулирует особые действия, связанные с графическим представлением окна на экране, реакцией на пользовательский ввод, и извещения другого окна при вводе важной информации.
Вызывая специальные функции, можно
•динамически перемещать элемент управления (MoveWindow - функция определяет новое расположение и размеры окна в системе координат, связанной с родительским окном),
•делать его активным или неактивным (EnableWindow, для определения,
является ли окно заблокированным, используется функция IsWindowEnabled),
•скрывать его или отображать (ShowWindow),
•изменять заголовок окна (SetWindowText),
•уничтожить созданный элемент управления (DestroyWindow).
Создание дочерних окон
Для создания дочернего окна управления собственного класса, следует
•определить класс окна и зарегистрировать его в Windows функцией
RegisterClass;
•затем с помощью функции CreateWindow необходимо создать окно на основе этого класса.
Если создается одно из предопределенных дочерних окон управления, то для этого дочернего окна класс окна регистрировать не надо. Такой класс уже существует в Windows и имеет одно из следующих имен: “button”, ”edit”, “static”, “listbox”, “combobox” и “scrollbar”. Приложение просто использует одно из этих имен в качестве параметра в функции CreateWindow.
•Параметр стиля окна функции CreateWindow более точно определяет вид и свойства дочернего окна управления. Windows включает в себя оконные процедуры, обрабатывающие сообщения тех дочерних окон, которые созданы на основе перечисленных классов.
Для создания дочернего окна элементов управления необходимо вызвать функцию CreateWindow. С помощью этой функции создаются все окна в приложениях. Прототип функции:
HWND CreateWindow(LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int
nHeight,HWND hWndParent, HMENU hMenu, HANDLE hInstance, LPVOID *lpParam);
•Параметр функции lpClassName - указатель на строку, содержащую имя класса,
на базе которого создается окно. Для создания кнопки, например, необходимо указать имя класса “button”.
•Параметр lpWindowName - указатель на строку, содержащую текст окна. Для элементов управления - это либо надпись на кнопке, либо текст в поле редактирования, либо что-то другое в зависимости от типа элемента управления.
•Параметр dwStyle - стиль создаваемого окна. Этот параметр задается как логическая комбинация отдельных битов. Для дочерних окон управления
следует задать стиль как комбинацию констант WS_CHILD, WS_VISIBLE, WS_CLIPSIBLINGS и констант, определяющих стили элемента управления.
•Параметры x и y определяют положение верхнего левого угла дочернего окна
относительно верхнего левого угла рабочей области родительского окна.
•Параметры nWidth и nHeight определяют ширину и высоту создаваемого элемента управления.
•Параметр hWndParent определяет дескриптор родительского окна, на поверхности которого создается дочернее окно.
•Параметр hMenu - идентификатор порожденного (child) окна. Для каждого создаваемого дочернего окна необходимо определить собственный уникальный идентификатор. Родительское окно будет получать от дочерних окон сообщения WM_COMМAND. При помощи идентификатора элемента управления оконная
процедура родительского окна сможет определить дочернее окно, пославшее ей сообщение.
•Параметр hInstance - дескриптор экземпляра копии приложения, которое создает окно. Необходимо использовать значение, передаваемое функции WinMain через параметр hInstаnce.
•Последний параметр lpParam используется для передачи окну дополнительных данных. При создании дочерних окон управления он должен быть равен NULL.
Константы, идентифицирующие стили предопределенных классов элементов управления, определены в заголовочных файлах Windows и имеют соответственно следующие префиксы: BS_ - “button”, ES_ - ”edit”, SS_ - “static”, LBS_ - “listbox”, CBS_ - “combobox” и SBS_ - “scrollbar”.
Пример создания обычной кнопки в оконной процедуре главного окна приложения (hInst – глобальная переменная, в которой хранится дескриптор экземпляра приложения, передаваемый в функцию WinMain; hWnd – дескриптор главного окна, передается в качестве параметра в его оконную процедуру):
static UINT ID_button=1; static HWND hWndButton;
. . .
hWndButton=CreateWindow("button","Exit", WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|BS_PUSHBUTTON, x,y,width,height,hWnd,(HMENU)ID_button,hInst,NULL);
. . .
После вызова CreateWindow оконные процедуры дочерних окон управления внутри Windows поддерживают их работу и управляют всеми процессами перерисовки (за исключением кнопки стиля BS_OWNERDRAW).
Можно создавать свои собственные дочерние элементы управления, но есть также возможность использовать преимущества нескольких уже определенных классов окна (и оконных процедур), с помощью которых приложение может создавать стандартные дочерние окна управления, присутствующие обычно во всех Windowsприложениях.
•Стандартные дочерние окна управления имеют вид кнопок, флажков, окон редактирования, списков, комбинированных списков, строк текста и полос прокрутки. В Windows производится обработка мыши этими окнами и их отрисовка, а приложение обрабатывает только сообщение WM_COMMAND,
которыми дочерние окна информируют оконную процедуру о различных событиях.
