Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы

         

Многооконный интерфейс MDI

Введение
Многооконный интерфейс MDI
Окна MDI-приложения

Инициализация MDI-приложения
Изменения в цикле обработки сообщений
Функции окон MDI-приложения
Функция окна Frame Window
Функция окна Document Window

Создание и уничтожение окна Document Window
Приложение MDIAPP
Листинг 1.1. Файл mdiapp/mdiapp.cpp
Листинг 1.2. Файл mdiapp/mdiapp.hpp

Листинг 1.3. Файл mdiapp/mdiapp.rc
Листинг 1.4. Файл mdiapp/mdiapp.def
Добавление окон Toolbar и Statusbar
Приложение MDITB
Листинг 1.5. Файл mditb/mditb.cpp

Листинг 1.6. Файл mditb/mditb.hpp
Листинг 1.7. Файл mditb/mditb.rc
Листинг 1.8. Файл mditb/mditb.def
Работа с окнами Document Window
Безопасное уничтожение окон Document Window
Динамическое изменение главного меню приложения
Идентификация окон Document Window
Обмен данными через Clipboard

Простейшие приемы использования Clipboard
Функции для работы с Clipboard
Запись данных в Clipboard
Чтение данных из Clipboard
Приложение CLIPTXT

Листинг 2.1. Файл cliptxt/cliptxt.cpp
Листинг 2.2. Файл cliptxt/cliptxt.hpp
Листинг 2.3. Файл cliptxt/cliptxt.rc
Листинг 2.4. Файл cliptxt/cliptxt.def
Clipboard и редактор текста EDIT
Запись и чтение графических изображений

Запись DDB
Запись палитры
Запись метафайла
Новая версия приложения BMPINFO
Листинг 2.5. Файл bmpinfo/bmpinfo.cpp
Листинг 2.6. Фрагмент файла bmpinfo/dib.cpp
Чтение DDB

Чтение палитры
Чтение метафайла
Просмотр содержимого Clipboard
Окно просмотра Clipboard
Приложение CLIPSHOW
Листинг 2.7. Файл clipshow/clipshow.cpp

Листинг 2.8. Файл clipshow/clipshow.hpp
Листинг 2.9. Файл clipshow/clipshow.rc
Листинг 2.10. Файл clipshow/clipshow.def
Отложенная запись
Выполнение отложенной записи
Приложение CLIPRNDR

Листинг 2.11. Файл cliprndr/cliprndr.cpp
Листинг 2.12. Файл cliprndr/cliprndr.hpp
Листинг 2.13. Файл cliprndr/cliprndr.rc
Листинг 2.14. Файл cliprndr/cliprndr.def
Нестандартный формат данных
Другие функции для работы с Clipboard

Обмен данными через DDE
Архитектура "клиент-сервер"
Инициализация и создание канала связи
Регистрация в библиотеке DDEML
Регистрация сервиса

Функция обратного вызова DDEML
Создание и уничтожение канала
Передача данных через канал DDEML
Запрос данных от сервера
Передача данных серверу
Выполнение команды

Приложение DDEMLSR
Листинг 3.1. Файл ddeml/ddemlsr.cpp
Листинг 3.2. Файл ddeml/ddemlfn.cpp
Листинг 3.3. Файл ddeml/ddemlsr.hpp
Листинг 3.4. Файл ddeml/ddemlsr.rc
Листинг 3.5. Файл ddeml/ddemlsr.def
Приложение DDEMLCL
Листинг 3.6. Файл ddeml/ddemlcl.cpp

Листинг 3.7. Файл ddeml/ddemlcf.cpp
Листинг 3.8. Файл ddeml/ddemlcf.hpp
Листинг 3.9. Файл ddeml/ddemlcf.rc
Листинг 3.10. Файл ddeml/ddemlcf.def
Отладка DDEML-приложений

Справочная система Windows Help
Элементы справочной системы
Разделы
Перекрестные ссылки
Оглавление
Органы управления

Подготовка разделов

Подготовка разделов
Атрибуты разделов

Назначение атрибутов разделам справочной системы
Создание перекрестных ссылок
Создание вторичного окна
Ссылка на другой hlp-файл
Создание исходного текста для файла hlpfile.hlp
Создание файла проекта справочной системы
Листинг 4.1. Файл hlpfile/hlpfile.hpj
OPTIONS
FILES

WINDOWS
CONFIG
Компиляция исходных файлов проекта
Графические изображения
Непосредственная вставка изображения
Вставка с помощью ссылки
Использование изображений для ссылок на раздел
Гиперграфика
Как учесть разрешение монитора
Макрокоманды

Вызов макрокоманды
Список встроенных макрокоманд
About()
AddAccelerator(key, shift, "macro")
Annotate()
AppendItem("menuid", "itemid", "itemname", "macro")
Back()
BookmarkDefine()
BookmarkMore()
BrowseButtons()

ChangeButtonBinding("buttonid", "buttonmacro")
ChangeItemBinding("itemid", "itemmacro")
CloseWindow("windowname")
Contents()
CopyDialog()
CopyTopic()
CreateButton("buttonid", "name", "macro")
DeleteMark("marktext")
DisableButton("buttonid")
DisableItem("itemid")

EnableButton("buttonid")
EnableItem("itemid")
ExecProgram("cmd", "show")
FileOpen()
FocusWindow("windowname")
GoToMark("marktext")
HelpOn()
History()
IfThen(...)
IfThenElse(...)

InsertItem("menuid"
InsertMenu("menuid", "menuname", pos)
IsMark("marktext")
JumpContents("hlp_filename")
JumpContext("filename", contextnumber)
JumpHelpOn()
JumpId("filename", "contextstring")
JumpKeyword("filename", "keyword")
Next()
Not(...)

PopupContext("filename", contextnumber)
PopupId("filename", "contextstring")
PositionWindow(x, y, w, h, wndstate, "windowname")
Prev()
Print()
PrinterSetup()
RegisterRoutine("DLLname", "functionname", "format")
SaveMark("marktext")
Search()
SetContents("filename", "contextnumber")

SetHelpOnFile("filename")
Функция WinHelp
Прототип функции WinHelp
Прототип функции WinHelp - 2
Справочная система HELPMORE.HLP
Листинг 4.2. Файл hlpmore/hlpmore.hpj
Приложение HELPMWH
Листинг 4.3. Файл hlpmore/helpmwh.cpp

Листинг 4.4. Файл hlpmore/helpmwh.hpp
Листинг 4.5. Файл hlpmore/helpmwh.rc
Листинг 4.6. Файл hlpmore/helpmwh.def
Встроенное окно
Создание встроенного окна
Сообщения для встроенного окна
Сообщение WM_CREATE

Сообщение EWM_QUERYSIZE
Сообщение EWM_RENDER
Сообщение EWM_ASKPALETTE
Сообщение EWM_FINDNEWPALETTE
Библиотека HELPMORE.DLL
Листинг 4.7. Файл hlpmore/hlpmore.cpp

Листинг 4.8. Файл hlpmore/hlpmore.h
Листинг 4.9. Файл hlpmore/hlpmore.rc
Листинг 4.10. Файл hlpmore/hlpmore.def
Другие возможности
Глобальные переменные
Секция BAGGAGE
Вызов внутренних функций
Драйверы для Windows

Стандартные драйверы
Драйвер видеоконтроллера
Драйвер принтера
Драйвер клавиатуры

Драйвер мыши
Драйвер последовательного адаптера
Виртуальные драйверы
Виртуальные машины в Windows
Модель памяти FLAT
Структура виртуального драйвера
Определение виртуального драйвера

Сегменты инициализации
Постоянные сегменты
Процесс инициализации
Список системных управляющих сообщений
Инициализация драйвера
Завершение работы драйвера

Инициализация виртуальной машины
Завершение работы виртуальной машины
Изменение состояния виртуальной машины
Сервис, предоставляемый виртуальным драйвером
Контекст виртуальной машины
Сервис для виртуального драйвера
Сервис системы управления виртуальными машинами
Сервис виртуального драйвера SHELL

Сервис виртуального драйвера контроллера прерываний
Сервис виртуального драйвера контроллера прямого доступа к памяти
Сервис виртуального драйвера жесткого диска
Драйвер VXDSRV
Листинг 5.1. Файл vxdsrv\vxdsrv.asm

Инициализация реального режима

Инициализация реального режима
Системная критическая инициализация
Программный интерфейс драйвера
Копирование строк
Фильтр прерывания INT21h
Вызов функции обратного вызова
Вызов процедуры в среде виртуальной машины

Определение текущего диска и каталога
Файл определения модуля виртуального драйвера
Листинг 5.2. Файл vxdsrv\vxdsrv.def
Трансляция и сборка виртуального драйвера
Листинг 5.3. Файл vxdsrv\m.bat
Подключение виртуального драйвера
Приложение DOS2WIN
Листинг 5.4. Файл dos2win\dos2win.cpp

Листинг 5.5. Файл dos2win\dos2win.hpp
Листинг 5.6. Файл dos2win\vxdcall.hpp
Листинг 5.7. Файл dos2win\dos2win.rc
Листинг 5.8. Файл dos2win\dos2win.def
DLL-библиотека D2W.DLL
Листинг 5.9. Файл dos2win\d2w.cpp

Листинг 5.10. Файл dos2win\d2w.h
Листинг 5.11. Файл dos2win\d2w.def
Загружаемые драйверы
Функции для работы с загружаемыми драйверами
Функция DriverProc
Сообщения для драйвера
Драйвер WASTDRV.DLL
Листинг 5.12. Файл wast\wastdrv.cpp

Листинг 5.13. Файл wast\wastdrv.hpp
Листинг 5.14. Файл wast\wastvxd.hpp
Листинг 5.15. Файл wast\wastdrv.rc
Листинг 5.16. Файл wast\wastdrv.def
Листинг 5.17. Файл wast\oemsetup.inf
Приложение WAST
Листинг 5.18. Файл wast\wast.cpp

Листинг 5.19. Файл wast\wast.hpp
Листинг 5.20. Файл wast\wast.rc
Листинг 5.21. Файл wast\wast.def
Литература

Создание справочной системы