ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 17 Глава 8. Использование графического редактора Paint ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Стр. 181, Таблица 8.1: Действия "мыши" для команд Zoom In и Zoom Out зарезервированы. Для возврата к прежнему размеру дважды щелкните кнопкой "мыши" на пиктограмме Zoom; для распахивания укажите на пи пиктограмму Zoom, нажмите клавишу Shift и дважды щелкните кнопкой "мыши". Стр. 188: Корректным текстом для второго пункта будет следу- ющий: ...затем выберите из пиктограммы или меню Bitmap Edit Foreground Color или Edit Background Color (в зависимости от то- го, какой тип ресурса вы редактируете). Стр. 189: В двух местах на данной странице в тексте говорит- ся "палитра", а должно быть "устройство". В разделе "Редактиро- вание цвета" текст в круглых скобках в первом параграфе должен выглядеть так: (для устройства с 16 цветами вы можете видеть в этом блоке некоторое нарушение цвета) Примечание на полях в нижней части страницы ссылается на 256-цветную палитру. Цвет Granted соответствует цвету Requested для 256-цветных (или больше) устройств, а не палитр. Стр. 190: Командная кнопка System разрешена для устройств, поддерживающих 256 или более цветов. Глава 9. Создание пиктограмм ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Стр. 202, Рис. 9.4 сопутствующий текст: Диалоговое окно на- зывается New File Resource. Глава 10. Создание макрокоманд ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Стр. 224, Рис. 10.4 и сопутствующий текст: Диалоговое окно называется New File Resource. Глава 12. Создание шрифтов ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Стр. 243: После шага 1 в "Создании нового ресурса шрифта" следует включить параграф: Если вы создаете новый проект, то можете выбрать формат .RC, .RES или .FNT. Если выбирается .RES или .FNT, пакет разработчика ресурсов автоматически запускает редактор Paint. Диалоговое окно Source/Binary не выводится. В шаге 2 выбираемый вами параметр называется FONT, а не .FNT. Кроме того, относительно параметров Source и Binary следует разъяснить следующее: Параметр Source "встраивает" ресурс шрифта в текущий проект. Шрифт не существует в виде отдельного файла и не может использо- ваться в другой проект. Параметр Binary сохраняет ресурс шрифта в виде отдельного файла (с расширением .FNT), который компонуется с текущим проектом. Используя команду FileіAdd to Project, вы може- те компоновать файл .FNT с другими проектами. Стр. 244: Инструментальные средства редактора Paint выводят- ся с правой стороны экрана (аналогичная ошибка на стр. 255). Стр. 246: В пояснении параметра Stretch Current Chars следу- ет указать следующее: При выборе данного параметра все изменения, вносимые в шири- ну или высоту значений будут вызывать соответствующее изменение ширины или высоты существующих символов. Стр. 252: В шаге 4 в верхней части страницы командой должна быть FileіSave Project или FileіSave File As. FileіSave Project перезаписывает текущий проект; FileіSave File As создает новый файл проекта, позволяя вам сохранять старую версию. В разделе "Сохранение проекта" командой должна быть FileіSave Project. В разделе "Сохранения ресурса шрифта в виде файла" форматом является ResourceіSave Resource As, а диалоговое окно называется Save Resource As. Первое предложение раздела следует читать так: Сохранение всего проекта сохраняет в проекте все ресурсы, а не только ресурс шрифта, с которым вы работаете. Стр. 256: На шаге 3 неточны две ссылки на страницы. Во вто- ром параграфе должна быть ссылка на стр. 246 (максимальное значе- ние ширины). В третьем параграфе корректной будет ссылка на стр. 247. Приложение A. Технические замечания ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Стр. 266: Несовместимости препроцессоров между компилятором ресурсов Microsoft (Microsoft Resource Compiler) и компилятором пакета разработчика ресурсов при обработке сложной параметризации #defines теперь нет. Однако Microsoft Resource Compiler и пакет разработчика ре- сурсов сохраняют несовместимость в следующих областях: - интерпретация чисел с предшествующими нулями; - директива препроцессора #undef; - вставка лексем препроцессором; - выражения в идентификаторах ресурсов и типах ресурсов; - шестнадцатиричные числа в идентификаторах ресурсов и типах ресурсов; - сложные выражения константы; - дублируемые идентификаторы ресурсов; - идентификаторы ресурсов, большие 32767; - свободные операторы END; - свободные операции в выражениях; - пропущенные операции в выражениях; - синтаксический анализ оператора CAPTION; - макрокоманды в директивах включения; - допустимые символы в именах ресурса. Числа с предшествующими нулями ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Из-за неоднозначности в обработке чисел с начальными нулями в компиляторе ресурсов Microsoft не используйте их в выражениях или идентификаторах препроцессора. Компилятор пакета разработчика ресурсов однозначно интерпретирует такие числа как восьмеричные числовые константы (если предшествующий 0 используется как часть идентификатора или выражения препроцессора). Компилятор ресурсов Microsoft интерпретирует числа с предшествующими нулями как вось- меричные числа, а те же числа в идентификаторах - как десятичные числа. Например, компилятор ресурсов Microsoft интерпретирует выра- жение 010+1 как 9 в следующем выражении препроцессора, но как 11 в идентификаторе таблицы строк. #if (9 == 010+1) STRINGTABLE BEGIN 010+1, "Bug" END #endif Директива препроцессора #undef ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Пакет разработчика ресурсов имеет ограниченную поддержку ди- рективы препроцессора #undef. Вы можете использовать ее только с директивами #define, на которые не ссылаются ресурсы. Если вы ис- пользуете #undef с директивой #define, на которую имеется ссылка, то при компиляции файла в пакете разработчика ресурсов получите фатальную ошибку компилятора .RC. Это ограничение не относится к компилятору ресурсов, работа- ющему в режиме командной строки. Вставка лексем ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Пакет разработчика ресурсов не поддерживает вставку лексем в операторах препроцессора. См. "Руководство программиста по Borland C++", где о вставке лексем рассказывается подробнее. Шестнадцатиричные числа в идентификаторах и типах ресурсов ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Пакет разработчика ресурсов поддерживает шестнадцатиричные числа в идентификаторах ресурсов; компилятор ресурсов Microsoft - нет. Компилятор ресурсов Resource Compiler поддерживает шестнад- цатиричные числа в идентификаторах ресурсов, а компилятор ресур- сов Microsoft - нет. Например, следующий оператор корректно ком- пилируется при использовании пакета разработчика ресурсов, но да- ют ошибку в компиляторе ресурсов Microsoft: 0x0001 ICON file.ico Компилятор ресурсов Microsoft генерирует пиктограмму ресурса с именем "0x0001". Пакет разработчика ресурсов генерирует пиктог- рамму ресурса с идентификатором, равным 1. Выражения в идентификаторах ресурсов и типах идентификаторов ресурсов ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Пакет разработчика ресурсов поддерживает выражения в иденти- фикаторах ресурсов; компилятор ресурсов Microsoft их не поддержи- вает. Например, следующий оператор корректно компилируются при использовании пакета разработчика ресурсов, но дают ошибку в ком- пиляторе ресурсов Microsoft: 101 + 1000 BITMAP vga.bmp Компилятор ресурсов Microsoft анализирует "101" как иденти- фикатор ресурса, "+" - как имя типа ресурса, а "1000" - как имя файла, а затем дает ошибку. Пакет разработчика ресурсов корректно генерирует графическое изображение (ресурс битового массива) с идентификатором, равным 1101. Сложные выражения-константы ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Пакет разработчика ресурсов поддерживает в любом месте сце- нария ресурсов, где допускается число, полные выражения-константы языка Си. Компилятор ресурсов Microsoft поддерживает только прос- тые выражения. Например, следующее выражение корректно вычисляет- ся пакетом разработчика ресурсов, но дает ошибку в компиляторе ресурсов Microsoft: 3 * (1 + 2) - 1 Наиболее общий пример такой несовместимости часто можно ви- деть в операторах ICON в шаблонах DIALOG. Следующий оператор вы- зывает в пакете разработчика ресурcов (но не в компиляторе ресур- сов Microsoft) ошибку: ICON 3 -1, 10, 10, 0, 0 Пакет разработчика ресурсов интерпретирует "3 -1" как выра- жение, которое при вычислении дает 2. Компилятор ресурсов Microsoft интерпретирует "3 -1" как два отдельных поля. Если вы после первого числа добавите запятую, то оба компилятора будут интерпретировать оператор корректно: ICON 3, -1, 10, 10, 0, 0 Дублирование идентификаторов ресурсов ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Чтобы ресурсы были доступны на этапе выполнения, пакет раз- работчика ресурсов налагает правило, чтобы идентификаторы или имена этого ресурса в каждом типе ресурса были уникальными. Ком- пилятор ресурсов Microsoft этого не делает. Следующие операторы приводят к тому, что пакет разработчика ресурсов выводит сообще- ние об ошибке: 1 ICON file1.ico 1 ICON file2.ico Идентификаторы ресурсов, превышающие 32767 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Хотя в документации Microsoft утверждается, что идентифика- тором ресурса может быть любое число от 1 до 65535, фактические для обеспечения их уникальности вы должны использовать идентифи- каторы ресурсов в диапазоне от 1 до 32767. Причина состоит в том, что программы компоновки ресурсов, такие как RLINK или компилятор ресурсов Microsoft при построении каталога ресурса в выполняемом файле выполняют над всеми идентификаторами ресурса и значением 0x8000 операцию OR, что дает значения от 32768 до 65535. Свободные операторы END ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Пакет разработчика ресурсов не поддерживает операторы END без соответствующего BEGIN. Компилятор ресурсов Microsoft допус- кает такие операторы. Например, следующий фрагмент сценария даст в пакете разработчика ресурсов ошибку: 1 RCDATA BEGIN 0 END END Свободные операции в выражениях ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Пакет разработчика ресурсов не допускает "свободных" опера- ций в выражениях-константах; компилятор ресурсов Microsoft позво- ляет их использовать. Например, следующее выражение в пакете раз- работчика ресурсов отмечается как ошибочное: WS_SYSMENU і WS_CAPTION і Чтобы исправить ошибку, просто удалите последнюю поразрядную операцию OR: WS_SYSMENU і WS_CAPTION Пропущенные операции в выражениях ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Синтаксический анализатор пакета разработчика ресурсов тре- бует, чтобы во всех выражениях присутствовали все необходимые операции. Компилятор ресурсов Microsoft предполагает, что пропу- щенная операция - это поразрядная операция OR. Например, следую- щее выражение в пакете разработчика ресурсов отмечается как оши- бочное: WS_SYSMENU WS_CAPTION Чтобы скорректировать ошибку, добавьте поразрядную операцию OR: WS_SYSMENU і WS_CAPTION Синтаксический анализ оператора CAPTION ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Способ обработки оператора CAPTION в шаблоне DIALOG зависит в компиляторе ресурсов Microsoft от порядка; в пакете разработчи- ка ресурсов это не так. Различие иллюстрируется следующими фраг- ментами: 1 DIALOG 10, 10, 100, 100 CAPTION "Caption" BEGIN END 2 DIALOG 10, 10, 100, 100 STYLE WS_POPUP CAPTION "Caption" BEGIN END 3 DIALOG 10, 10, 100, 100 CAPTION "Caption" STYLE WS_POPUP BEGIN END В первом примере явный оператор STYLE отсутствует, и оба компилятора используют по умолчанию WS_POPUP і WS_BORDER і WS_SYSMENU, (операция OR с WS_CAPTION). Стилем результирующего шаблона DIALOG будет: WS_POPUP і WS_BORDER і WS_SYSMENU і WS_CAPTION Во втором примере STYLE предшествует оператору CAPTION, и оба компилятора применяют Стилем результирующего шаблона DIALOG будет: WS_POPUP і WS_CAPTION В третьем примере оператор CAPTION предшествует оператору STYLE. Обнаружив явный оператор STYLE, компилятор ресурсов Microsoft, очищает все предшествующие и заранее установленные стили. Результирующий шаблон DIALOG будет иметь стиль: WS_POPUP Компилятор пакета разработчика ресурсов выполняет над опера- торами CAPTION и STYLE операцию OR, создавая шаблон DIALOG со стилем: WS_CAPTION і WS_POPUP Макрокоманды во включаемых директивах ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Пакет разработчика ресурсов не поддерживает в директивах включения макрорасширения. Следующий фрагмент приводит к ошибке компиляции: #define MYFILE "afile.h" #include MYFILE Поддержка оператора CTLDATA ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Пакет разработчика ресурсов поддерживает использование опе- ратора CTLDATA со специализированными управляющими элементами. Оператор CTLDATA описывается в файле CUSTCNTL.RW. Компилятор ре- сурсов Microsoft не поддерживает CTLDATA. Символы, допустимые в именах ресурсов ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В пакете разработчика ресурсов для символов в именах ресур- сов соблюдаются обычные правила языка Си. Он воспринимает все ал- фавитно-цифровые символы из набора символов ANSI (включая не ла- тинские символы верхнего регистра типа "В") и подчеркивание. Не алфавитно-цифровые символы типа прямой и обратной косой черты или + не поддерживаются. Имя ресурса должно начинаться с буквы или подчеркивания и не может начинаться с числа. Компилятор ресурсов Microsoft не ограничивает имена ресурсов алфавитно-цифровыми символами. Изменения к данному изданию ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В этом разделе описываются изменения, внесенные в данное из- дание пакета разработчика ресурсов. Параметр Visible ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Стиль диалоговых блоков для кнопок, блоков списка, групповых блоков, комбинированных блоков, статических управляющих элементов и текстовых управляющих элементов (включая статический текст) имеют кнопку с независимой фиксацией Visible. По умолчанию этот параметр установлен (WS_VISIBLE), и управ- ляющий элемент выводится при первоначальном выводе окна. Если данный параметр выключается (NOT WS_VISIBLE), то управляющий эле- мент не выводится. В этом случае прикладная программа для вывода скрытого управляющего элемента может вызвать на этапе выполнения функцию ShowWindow. Совместимость с версией Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В диалоговом окне FileіPreferences вы можете задать целевую версию Windows. Заметим, что файлы .RES and .EXE, предназначенные для Windows 3.1 не имеют обратной совместимости с Windows 3.0. Если файл .RES предназначен для Windows 3.1, то для привязки ресурсов к прикладной программе вы не можете использовать версию RC.EXE для Windows 3.0. Нужно использовать инструментальные средства Borland или версию 3.1 компилятора ресурсов Microsoft. Позиционирование диалогового окна ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Для диалоговых окон, использующих стиль WS_OVERLAPPED, Windows позволяет вам позиционировать диалоговое окно в самой Windows. Диалоговое окно Size Dialog (AlignіSize) содержит кнопку с зависимой фиксацией Set by Windows, которая выводится в колонке Horizontal Size, когда выбранным управляющим элементом является рамка диалогового окна. Если вы щелкните "мышью" на кнопке Set by Windows, поле по- зиционирования по X автоматически становится пустым. Пакет разра- ботчика ресурсов помещает в поле X значение 0x8000. (хотя на эк- ране оно не выводится), которое сообщает Windows, что она ответс- твенна за позиционирование диалогового окна. Данный параметр в общем случае применяется для кадров диало- говых окон, которые используется в качестве основных окон. Новые средства в Windows 3.1 ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В данном разделе описываются изменения в пакете разработчика ресурсов, которые отражают новые средства Windows 3.1. Стили диалоговых окон ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В Windows версии 3.1 к трем диалоговым окнам стилей добавле- ны следующие параметры (кнопки с независимой фиксацией): Параметр List Box Style Scroll bar always В блоке списка всегда выводится верти- кальная полоса прокрутки, независимо от числа содержащихся в нем элементов. В WINDOWS.H для этого стиля имеется конс- танта LBS_DISABLENOSCROL. Параметр Combo Box Style Vertical scroll Комбинированный блок всегда выводит вер- always тикальную полосу прокрутки, независимо от числа содержащихся в нем элементов. В WINDOWS.H для этого стиля имеется конс- танта CBS_DISABLENOSCROL. Параметр Edit Text Style Read only Данное текстовое окно доступно только для чтения. В WINDOWS.H этому стилю соответс- твует константа ES_READONLY. Want return Многострочный текстовый управляющий эле- мент воспринимает для принудительного разбиения строки символ возврата каретки. Если фокус не находится на редактируемом текстовом управляющем элементе, возврат каретки поступает в Defpushbutton. В WINDOWS.H этому стилю соответствует конс- танта ES_WANTRETURN. Размеры пиктограмм ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Windows 3.1 поддерживает пиктограммы трех размеров: 32x32 и 32x16 (поддерживаемые также в Windows 3.0), плюс 64x64. Диалого- вое окно New Icon Image, показанное на Рис. 3.14 и 9.5 в "Руко- водстве пользователя по пакету разработчика ресурсов", не включа- ет в себя 64x64. При чтении Главы 9 ("Создание пиктограмм") нужно иметь в виду, что теперь поддерживается этот новый размер графи- ческого образа. Информация о версии ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Пакет разработчика ресурсов не поддерживает VERSIONINFO, включаемую в файлы .EXE Windows 3.1 информацию о версии. Подроб- ное описание VERSIONINFO вы можете найти в справочном файле паке- та разработчика ресурсов (Help). Требования компоновщика ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В следующих разделах описываются некоторые специальные тре- бования для компоновки. Описание компоновщика пакета разработчика ресурсов, работающего в режиме командной строки, и компиляторов см. ниже. Библиотека BWCC.LIB ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Если вы сначала компонуете свою программу с библиотекой им- порта BWCC.LIB, а затем с IMPORT.LIB, которые содержатся в подка- талоге LIB, определяемом программой Install, то важен порядок ис- пользования этих библиотечных файлов: файл BWCC.LIB должен пред- шествовать библиотеке IMPORT.LIB. Библиотека BWCC.DLL ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Необходимо сделать библиотеку динамической компоновки BWCC.DLL доступной для вашей прикладной программы на этапе выпол- нения. Для этого ее можно расположить в следующих местах: - в том же каталоге, что и файл .EXE прикладной программы; - в каталоге запуска Windows или в системном каталоге; - в каталоге, заданном в маршруте PATH. BWCC и библиотека объектных окон (OWL) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Если вы используете DLL-версию OWL (Object Windows Library), то требуется явная загрузка библиотеки BWCC.DLL. Для этого вклю- чите в WinMain перед кодом, вызывающим место запуска прикладной программы (Application Run) следующее: HANDLE hDLL: hDLL = LoadLibrary ("BWCC.DLL"); В конце WinMain вставьте следующую строку кода: if (hDLL) FreeLibrary ("BWCC.DLL"); Специализированные управляющие элементы Borland ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Библиотека специализированных управляющих элементов Borland (Borland Windows Custom Controls - BWCC) содержит специализиро- ванный диалоговый класс и набор специализированных управляющих элементов (командных кнопок, кнопок с независимой фиксацией, групповых затененных блоков и др.). BWCC позволяет улучшить представление ваших диалоговых окон и оптимизировать их функции. Использование специализированного диалогового класса ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Специализированный диалоговый класс BORDLG работает, как на визуальном, так и на функциональном уровне. - Он улучшает внешний вид вашего диалогового окна, закраши- вая фон кистью, меняющейся в соответствии с целевым уст- ройством отображения. Для экранов VGA и более высокой раз- решающей способности фон представляет собой тонкую сетку перпендикулярных линий, создавая эффект "рельефности". Для VGA и монохромных экранов фон белый. - Он оптимизирует отображение диалоговых блоков, непосредс- твенно вызывая специализированные подпрограммы изображения управляющих элементов, а не ожидая, пока управляющие эле- менты отобразит Windows. Это позволяет избежать ненужного замедления вывода диалоговых блоков. Чтобы использовать диалоговый класс, введите в диалоговом окне Window Style в качестве класса "bordlg". Использование специализированных управляющих элементов ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Специализированные управляющие элементы позволяют создать визуально привлекательные диалоговые окна с добавлением трехмер- ного эффекта. Для конечного пользователя они работают аналогично стандартным управляющим элементам Windows, хотя включают в себя некоторые технические улучшения (описанные ниже). Приведем краткое описание специализированных управляющих элементов. Подробное описание см. ниже. Group shade Тень группы - затененная прямоугольная область (выемка), используемая для группирования дру- гих управляющих элементов. Отличается от стан- дартного группового блока тем, что дает ощуще- ние глубины. "Нажимаемая" Семейство "нажимаемых" командных кнопок с нес- командная кнопка колькими визуальными графическими символами и Borland другими возможностями отображения. Командные кнопки BWCC крупнее, чем большинство стандарт- ных командных кнопок Windows. Кнопка с Приподнятая кнопка с зависимой фиксацией в зависимой форме ромба. При выборе кнопки в ее центре по- фиксацией является черный ромбик, а затенение кнопки вы- Borland водится в обратном видеорежиме, что создает впечатление нажатия кнопки. Существуют также другие возможности отображения. Кнопка с Приподнятая кнопка с зависимой фиксацией (блок независимой проверки) с отметкой вместо "X". Существуют фиксацией также другие возможности отображения. Графическое Графическое изображение (битовый массив), ис- изображение пользуемое для вывода накладываемых панелей или немодифицируемых образов, которые остаются в диалоговом окне. Горизонтальные/ Горизонтальные и вертикальные линии, создающие вертикальные впечатление, что они вырезаны на поверхности бороздки диалогового окна. Вы можете преобразовать вы- емки в вертикальные и горизонтальные пороги, которые выглядят "приподнятыми" над поверх- ностью диалогового окна. Сообщения командной кнопки и кнопки с независимой фиксацией ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД "Нажимаемые" командные кнопки BWCC, кнопки с зависимой фик- сацией и кнопки с независимой фиксацией имеют следующие функцио- нальные улучшения по сравнению со стандартными управляющими эле- ментами Windows: - Они включают в себя дополнительный уровень уведомления ро- дительского окна и управление перемещением фокуса с по- мощью клавиатуры и табуляцией. Если вы выберите для типа порождающего диалогового окна управляющего элемента стиль Parent Notify (уведомление порождающего окна), то управля- ющий элемент на этапе выполнения посылает следующие сооб- щения (в соответствующих ситуациях): BBN_SETFOCUS Указывает порождающему окну командной кнопки или кнопки с независимой/зависимой фиксацией на установки на кнопку фокуса с помощью клавиатуры, либо кнопка с незави- симой фиксацией получила фокус посредс- твом действий, отличных от щелчка кнопкой "мыши". BBN_SETFOCUSMOUSE Указывает порождающему окну, что на ко- мандную кнопку, кнопку с независимой фик- сацией или кнопку с зависимой фиксацией фокус установлен с помощью щелчка кнопкой "мыши". BBN_GOTATAB Указывает порождающему окну, что при ус- тановленном на командную кнопку, кнопку с независимой фиксацией или кнопку с зави- симой фиксацией фокусе пользователь нажал клавишу Tab. Порождающее окно может вме- шаться в нажатие клавиши, возвращая нену- левое значение. BBN_GOTABTAB Указывает порождающему окну, что при ус- тановленном на командную кнопку, кнопку с независимой фиксацией или кнопку с зави- симой фиксацией фокусе пользователь нажал клавиши Shift-Tab (обратная табуляция) клавишу Tab. Порождающее окно может вме- шаться в нажатие клавиш, возвращая нену- левое значение. - Они включают в себя возможность отображения владельцем, так что порождающее окно может отображать командную кноп- ку, кнопку с независимой фиксацией или кнопку с зависимой фиксацией. Управляющий элемент, отображаемый владельцем, будет выглядеть отлично от стандартных управляющих элемен- тов Windows, но будет иметь поведение, стандартное для данного типа управляющих элементов. Использование стиля диалоговых окон BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Для управляющих элементов BWCC существуют четыре типа диало- говых окон: - Стиль командной кнопки Borland. - Стиль кнопки с зависимой фиксацией Borland; - Стиль кнопки с независимой фиксацией Borland; - Стиль тени Borland. Каждый из них имеет управляющее окно для ввода заголовка Caption и идентификатора управляющего элемента Control ID. Стиль диалоговых окон командной кнопки и с кнопки с независимой фикса- цией имеет параметры атрибутов для Tab Stop (шаг табуляции), Disabled (запрещенный), Group (группа) и Border (граница), кото- рые описываются в "Руководстве пользователя по пакету разработчи- ка ресурсов", а также описанные выше параметры Visible (видимый), Parent Notify (уведомление порождающего окна) и Owner Draw (отоб- ражение владельцем). Параметром атрибута для теневого стиля диа- логового блока является Group. В следующих четырех разделах описываются средства, уникаль- ные для каждого стиля диалогового окна. Стиль диалогового окна командной кнопки Borland ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данное диалоговое окно позволяет вам выбрать один из трех типов кнопки: Pushbutton, Defpushbutton или Bitmap. По умолчанию выбирается параметр Pushbutton ("нажимаемая" командная кнопка). С целью идентификации ее для конечного пользо- вателя, как используемой по умолчанию, командная кнопка Defpushbutton имеет жирную границу. Эта кнопка выполняется при нажатии пользователем клавиши Enter. (Исключением является ситуа- ция, когда фокус перемещен на управляющий элемент редактирования текста, для которого установлен флаг Want Return. См. выше соот- ветствующий раздел.) Для управляющих элементов типа командных кнопок BWCC предоп- ределены следующие значения идентификаторов Control ID и образов: ID кнопка образ ДДДДДДДДДДДД ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 1 OK зеленая отметка 2 Cancel красный Х 3 Abort экстренная кнопка 4 Retry слот-машина 5 Ignore знак ограничения скорости 55 mph 6 Yes зеленая отметка 7 No красный кружок с косой чертой 998 Help синий вопросительный знак - Button общий текст кнопки - используется следующий доступный Control ID ДДДДДДДДДДДД ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Если вы выбираете параметр Bitmap (графическое изображение) то в образ кнопки можно включить графический образ (на основе ее идентификатора Control ID). Чтобы прочесть графическое изображе- ние, сделайте следующее: 1. Для добавления в свое диалоговое окно управляющей команд- ной кнопки BWCC используйте управляющий элемент Button. Обратите внимание на ее идентификатор Control ID. 2. Переключитесь в графический редактор Paint и создайте графический образ (см. "Руководство пользователя по паке- ту разработчика ресурсов"). 3. В графическом редакторе Paint, выберите команду Resource іRename. Если у вас есть экран с разрешающей способностью VGA или более высокой, добавьте к идентификатору управляющего элемента (Control ID) 1000, и введите это значение в поле New Name. Для EGA или монохромных экранов добавьте к Control ID 2000 и введите это значение в поле New Name. Выберите OK. 4. Для возврата в редактор диалогов закройте графический ре- дактор Paint. В командной кнопке BWCC выводится графичес- кое изображение. Стиль диалогового окна кнопки с зависимой фиксацией Borland ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данное диалоговое окно перечисляет два стиля кнопки: Auto radio button BWCC и Windows комбинируют подсветку выделен- (автоматическая ного элемента и отмену выбора других кнопок. кнопка с зависи- Этот параметр используется по умолчанию. мой фиксацией) Radio button Для подсветки выбора кнопки и отмены выбора (кнопка с зави- других функция должна вызывать CheckDlgButton симой фиксацией) для посылки сообщения BM_SETCHECK. Стиль диалогового окна кнопки с независимой фиксацией Borland ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данное диалоговое окно перечисляет два стиля кнопки: Auto check box BWCC и Windows комбинируют подcветку выделен- (автоматическая ного элемента и отмену выбора других кнопок. кнопка с незави- Этот параметр используется по умолчанию. симой фиксацией) Check box Для подсветки выбора кнопки и отмены выбора (кнопка с неза- других функция должна вызывать CheckRadio- висимой фиксацией) Button для посылки сообщения BM_SETCHECK. Стиль теневого диалогового блока Borland ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Этот диалоговый блок вы можете использовать для конвертиро- вания вертикального или горизонтального углубления (см. выше). Выемки в основном предназначаются для использования в качестве разделителей в фоне диалогового окна; пороги разделяют блоки с серой тенью. Чтобы преобразовать вертикальную выемку в вертикальный по- рог, сделайте следующее: 1. Для добавления в диалоговое окно углубления используйте управляющий элемент Vertical Dip. 2. Расположите выемку и подберите для нее нужный размер. 3. Для вывода диалогового окна Borland Shade Style дважды щелкните на нем кнопкой "мыши". 4. Щелкните "мышью" на кнопке с независимой фиксацией Vertical Bump, затем выберите OK. Для преобразования горизонтальной выемки в горизонтальный порог соблюдайте ту же последовательность шагов, используя инс- трументальное средство Horizontal Dip и кнопку с независимой фик- сацией Horizontal Bump. Настройка существующих прикладных программ на использование BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Пакет разработчика ресурсов позволяет вам настроить сущест- вующие приложения Windows на управляющие элементы в стиле Borland (объемные кнопки с "рельефным видом" и др.). Этот процесс включа- ет в себя два шага: 1. Модифицируйте свой файл WIN.INI для загрузки при запуске Windows библиотеки специализированных элементов фирмы Borland (Borland Windows Custom Control - BWCC). 2. Для изменения средств пользовательского интерфейса (типа диалоговых окон, меню, пиктограмм и т.д.) отредактируйте приложение в пакете разработчика ресурсов. Подробнее эти шаги описываются в следующих двух разделах. Загрузка BWCC для разрешения использования специализированных управляющих элементов Borland ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Библиотека BWCC, обеспечивающая поддержку специализированных управляющих элементов в стиле Borland, должна загружаться перед использованием средств BWCC. Отредактируйте файл WIN.INI (расположенный в основном ката- логе Windows), после чего Windows будет загружать файл LOADBWCC.EXE в память при загрузке. Программа установки помещает файл LOADBWCC.EXE в каталог компилятора языка (по умолчанию \BORLANDC\BIN) и добавляет этот каталог в свой маршрут. Добавьте файл LOADBWCC.EXE в начало списка файлов в операто- ре "LOAD=". Например, если оператор LOAD в файле WIN.INI выглядит следующим образом: LOAD=NWPOPUP.EXE то этот оператор нужно изменить на оператор: LOAD=loadbwcc.exe NWPOPUP.EXE Файл LOADBWCC.EXE должен указываться в операторе первым. Это обеспечивает, что BWCC загружается в память перед всеми модифици- рованными приложениями. Если вы редактируете WIN.INI из Windows, для фактической загрузки LOADBWCC.EXE нужно сначала перезапустить Windows. Пример: настройка существующего приложения ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В данном разделе представлен обзор шагов, выполняемых обычно для модификации существующего приложения (в данном случае - адми- нистратора программ Windows). Пакет разработчика ресурсов оперирует с проектами, состоящи- ми из одного или более ресурсов. Поскольку приложение Windows содержит набор ресурсов, вы можете открыть само приложение как проект, а затем модифицировать его ресурс. Сохранение резервной копии приложения ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Всегда следует редактировать копию приложения. Заменяйте оригинал только после того, как вы будете удовлетворены коррект- ной работой модифицированной версии. Чтобы создать резервную копию PROGMAN.EXE (администратора программ), сделайте следующее: 1. В основном окне администратора программ дважды щелкните кнопкой "мыши" на пиктограмме DOS Prompt. 2. В командной строке DOS перейдите в каталог C:\WINDOWS. 3. Наберите команду "copy PROGMAN.EXE MYSHELL.EXE" и нажмите клавишу Enter. 4. Вернитесь в Windows, набрав "exit" и нажав клавишу Enter. Открытие проекта ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Чтобы открыть администратор программ в виде проекта в пакете разработчика ресурсов, сделайте следующее: 1. Для вывода диалогового окна Open Project выберите команду FileіOpen Project. 2. Выведите список типов, нажав кнопку для вывода спускающе- гося списка типов файлов File Type. Выберите из списка EXE Application. 3. Для изменения каталога, содержащего MYSHELL.EXE, исполь- зуйте блок Directories. 4. Для загрузки в виде проекта MYSHELL.EXE дважды щелкните кнопкой "мыши" в блоке списка Files. Редактирование управляющих элементов приложения ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Теперь, когда вы загрузили приложение в пакете разработчика ресурсов, для настройки приложения можно использовать редактор диалогов, редактор меню, редактор акселераторов, строковый редак- тор или графический редактор. Эти редакторы подробно описаны в "Руководстве пользователя по пакету разработчика ресурсов". В данном примере для преобразования одного из диалоговых блоков администратора программ к использованию BWCC вы можете ис- пользовать редактор диалогов. Примечание: При выводе в теле параграфа вводимый вами с клавиатуры текст выводится в виде вопросительных знаков. Если вам это не будет указано явно, не включайте вопроси- тельные знаки в вводимый текст. Запуск диалогового редактора ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Загрузив MYSHELL.EXE как текущий проект, вы увидите окно проекта Project с заголовком "myshell.exe". Это окно выводит спи- сок ресурсов, содержащихся в администраторе программ: меню, нес- колько диалогов, несколько таблиц строк, таблицу акселераторов и несколько пиктограмм. Вы можете редактировать любой из этих ре- сурсов, дважды щелкнув на нем кнопкой мыши или подсветив его и выбрав команду ResourceіEdit. Найдя секцию "Dialog" в списке ресурсов и дважды щелкнув "мышью" на "3", выберите диалог номер 3. Редактор диалогов загру- жает окно New Program Object (которое выводится при выборе поль- зователем команды администратора программ FileіNew). Когда выводится редактор диалогов, вы можете начать редакти- рования диалогового окна. Задача, выполняемая в этом примере, включает в себя: - изменение класса диалогового окна на стиль Borland; - изменение размера диалогового окна; - углубление и выравнивание управляющих элементов; - изменение кнопок с зависимой фиксацией на BWCC; - замену командных кнопок кнопками BWCC; - выравнивание командной кнопки; - сохранение и тестирование редактируемого блока диалога. Изменение имени диалогового класса ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Для конвертирования диалогового окна New Program Object в диалоговое окно стиля Borland нужно сначала изменить имя его класса: 1. Для вывода диалогового окна Window Style дважды щелкните "мышью" на строке заголовка диалогового окна. 2. Для перемещения курсора к текстовому управляющему элемен- ту Class нажмите клавишу Tab. 3. Введите в качестве класса Class следующее: BorDlg Щелкните "мышью" на кнопке OK диалогового окна. Диалоговое окно New Program Object имеет теперь "рельефный стиль" BWCC. Изменение размера и переупорядочивание диалогового окна ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Теперь измените размер и разметку диалогового окна, чтобы освободить место для "тени группы" и кнопок BWCC. (Тень группы - это углубленная область, помещаемая за двумя кнопками с зависимой фиксацией, что дает диалоговому окну эффект глубины.) 1. Выберите диалоговое окно, "щелкнув" мышью на его заголов- ке или крае. (Если оно уже выбрано, пропустите этот шаг.) 2. Отбуксируйте границу вниз на величину около двух дюймов. 3. Отмените выбор рамки диалогового окна, щелкнув "мышью" где-либо в пустой области диалогового редактора вне само- го диалогового блока. (При отмене выбора в других местах используйте тот же метод.) 4. Нажмите клавишу Shift и одновременно щелкните кнопкой "мыши" на каждой из командных кнопок диалогового окна (OK, Cancel и Help). Они будут выбраны. Удалите их, нажав клавишу Del. (Кнопки BWCC крупнее стандартных кнопок Windows. На следующих шагах вы замените кнопки.) 5. Выберите группу "New" и нажмите для ее удаления клавишу Del. Потом она будет заменена. Серый фон двух кнопок с зависимой фиксацией расширяется до текстовых строк. Уменьшите его, выполнив следующие шаги: 1. Выберите кнопку с зависимой фиксацией "Program Group". 2. Отбуксируйте правый край ее выделенной рамки влево, пока она не закроет текст. 3. Нажмите клавишу Shift и одновременно щелкните кнопкой "мыши" для выделения других кнопок с зависимой фиксацией. Теперь должны быть выбраны обе кнопки. 4. Выберите команду AlignіSize и Horizontal SizeіShrink для установки параметра Smallest диалогового окна Size Controls. 5. При двух выбранных кнопках (их фон теперь имеет один раз- мер) щелкните "мышью" на Horizontal Center (горизонталь- ное центрирование) в инструментальном средстве Dialog (третье слева в верхней строке инструментальных средств). 6. Чтобы освободить место для "новой" текстовой строки, наж- мите несколько раз клавишу стрелки вниз (для перемещения кнопок с зависимой фиксацией вниз). Когда кнопки с зави- симой фиксацией будут там, где требуется, нажмите клавишу Enter. Добавление тени группы ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Чтобы управляющие элементы выглядели углубленными, добавьте тень группы: 1. Щелкните "мышью" на инструментальном средстве тени группы (в верхнем правом углу палитры инструментальных средств). 2. Переместите крестовидный курсор вверх и влево от кнопок с зависимой фиксацией. Не начинайте слишком далеко над кнопками с зависимой фиксацией, иначе у вас не хватит места для текстовой строки "New". Щелкните "мышью" для размещения тени группы. 3. Буксируйте нижний правый угол теневого группового блока, пока он не окружит кнопки с зависимой фиксацией. Сделайте его достаточно большим, чтобы кнопки не выглядели "напи- ханными" в него. 4. Для центрирования тени группы в диалоговом окне щелкните "мышью" на Horizontal Center в инструментальных средствах Dialog (третий элемент слева в верхней строке инструмен- тальных средств Alignment). Добавление текстовой строки ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Чтобы добавить над теневым блоком группы текстовую строку "New": 1. Щелкните "мышью" на инструментальном средстве статическо- го текста (большая группа T в третьем столбца слева в па- литре инструментальных средств). 2. Переместите крестовидный указатель в точку непосредствен- но над верхним левом углом теневого группового блока. Для размещения статического текста щелкните "мышью". 3. Отбуксируйте правый край рамки статического текста впра- во, пока он не станет достаточно широким (как групповой теневой блок). 4. Дважды щелкните "мышью" на статическом тексте для вывода диалогового окна Static Style. 5. Наберите в качестве заголовка Caption " New" (с предшест- вующим пробелом) и щелкните кнопкой OK для закрытия диа- логового окна. 6. При выбранном статическом тексте нажмите клавишу Shift и одновременно щелкните "мышью" на групповом теневом блоке. 7. В диалоговом окне Size Control выберите команды Align іSize, затем Grow to Largest. 8. Отмените весь выбор, щелкнув "мышью" в пустой рабочей об- ласти вне рамки диалогового окна. Теперь из-за белого края с правой стороны тени группы статический текст выг- лядит несколько длиннее тени группы. 9. Для выбора статического текста щелкните кнопкой "мыши". 10. Отбуксируйте его правый край на один элемент сетки впра- во. (Вы увидите, как рамка выбора "притянется" к новой позиции. 11. Здесь, если необходимо, чтобы оставить только одну темную линию между статической тенью и тенью группы, вы можете также отбуксировать статический текст вниз немного ближе к тени группы. Если вам нужно проверить его позицию, отмените выбор стати- ческого текста. Преобразование кнопок с зависимой фиксацией ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Чтобы конвертировать к BWCC кнопку с зависимой фиксацией "Program Group". 1. Нажмите клавишу Ctrl и одновременно дважды щелкните на кнопке с зависимой фиксацией кнопкой "мыши". Выводится диалоговое окно Generic Control Style. 2. Измените класс Class с "BUTTON" на "BorRadio", затем щелкните "мышью" на OK. Кавычки обязательны, но регистр букв значения не имеют. Для кнопки с зависимой фиксацией "Program Item" повторите эти шаги. Добавление горизонтальной выемки ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В диалоговых окнах Borland горизонтальная выемка использует- ся для отделения кнопок выхода (OK, Cancel и других) от остальных управляющих элементов (см. выше). Чтобы добавить горизонтальное углубление, сделайте следующее: 1. Щелкните "мышью" на инструментальном средстве Horizontal Dip (второй элемент сверху в столбце BWCC в палитре инс- трументальных средств). 2. Щелкните кнопкой "мыши", переместив крестовидный курсор на левый край рамки диалогового окна, примерно на чет- верть дюйма ниже теневого блока группы. Заметим, что го- ризонтальное углубление не занимает полной ширины диало- гового окна. 3. Выберите команду AlignіSize, затем в параметре Dialog вы- берите Horizontal SizeіWidth. Замена командных кнопок ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Для замены командных кнопок диалогового окна на командные кнопки BWCC сделайте следующее: 1. Выберите инструментальное средство BWCC Button (в середи- не четвертого столбца палитры инструментальных средств). 2. Переместите крестовидный курсор в ту точку, где вы хотите разместить верхний левый угол первого столбца (кнопка OK) и щелкните "мышью". Для всех новых командных кнопок будет просто указываться "Button". Если размер диалогового окна для новых кнопок недостаточ- но, для увеличения места отбуксируйте нижнюю рамку. 3. Переместите "мышь" вправо, расположите стрелку указателя в той точке, где вы хотите поместить верхний левый угол второй кнопки (Cancel), и щелкните правой кнопкой "мыши". Сделав это, вы сдублируете большинство последних добав- ленных управляющих элементов (в данном случае, первую кнопку). 4. Чтобы поместить третью кнопку (Help), повторите шаг 3. Когда вы это сделаете, следует добавить горизонтальную строку из трех кнопок. О высоте строки беспокоиться не следует. Чтобы конвертировать первую кнопку к виду кнопки OK BWCC с зеленой отметкой, сделайте следующее: 1. Для вывода диалогового окна Borland Button Style дважды щелкните "мышью" на левой командной кнопке. 2. В поле Control ID наберите следующее (буквами в верхнем регистре): IDOK В качестве идентификатора управляющего элемента Control ID вы можете также ввести 1. 3. В качестве Button Type, чтобы OK стала используемой по умолчанию кнопкой, выберите Defpushbutton. 4. В Attributes щелкните "мышью" на группе кнопок с незави- симой фиксацией. (Кнопка теперь должна быть установлена в и в Tab Stop, и в Group.) 5. Для изменения вида кнопки OK в стиль Borland щелкните "мышью" на OK. Чтобы конвертировать вторую командную кнопку в кнопку Cancel BWCC с красной отметкой X сделайте следующее: 1. Для вывода диалогового окна Borland Button Style дважды щелкните "мышью" на второй командной кнопке. 2. В поле Control ID наберите следующее (буквами в верхнем регистре): IDCANCEL В качестве идентификатора управляющего элемента Control ID вы можете также ввести 2. 3. В Attributes щелкните "мышью" на группе кнопок с незави- симой фиксацией. (Кнопка теперь должна быть установлена в и в Tab Stop, и в Group.) 4. Для изменения вида кнопки Cancel в стиль Borland щелкните "мышью" на OK. Чтобы модицифировать последнюю кнопку (Help), сделайте сле- дующее: 1. Для вывода диалогового окна Borland Button Style дважды щелкните "мышью" на последней командной кнопке. В поле Caption наберите следующее: &Help (& подчеркивает "H," так что пользователь может вызвать Help, нажав клавиши Alt-H). 2. Переместитесь с помощью клавиши Tab к Control ID и введи- те "126". (Это было первоначальным идентификатором управ- ляющего элемента и требуется для возможности пользователю успешно обращаться к Help.) 3. В Attributes щелкните "мышью" на группе кнопок с незави- симой фиксацией. (Кнопка теперь должна быть установлена в и в Tab Stop, и в Group.) 4. Для выхода из диалогового окна щелкните "мышью" на OK. Чтобы выровнять командные кнопки относительно друг друга и сцентрировать их в диалоговом окне, выберите их сначала путем буксировки рамки выбора. Убедитесь, что больше ничего не выбрано. Затем используйте команды меню Align ли инструментальные средства выравнивания. Чтобы использовать команды меню Align: 1. Выберите AlignіAlign для вывода диалогового окна Align Controls. Выберите команду Vertical AlignmentіCenters и щелкните "мышью" на OK. Эта команда выравнивает командные кнопки на одной строке. 2. Для вывода диалогового окна Form Control Into an Array (Сформировать управляющие элементы в массив) выберите AlignіArray. Установите Rows (строки) в 1, Columns (столбцы) в 3, а Order (порядок) в "Left to right" (сле- ва-направо). Щелкните "мышью" на OK. Эта команда распре- деляет кнопки относительно друг-друга. 3. Если в нижней части диалогового окна слишком много места, то можно отбуксировать командные кнопки поближе к серой тени блока и отбуксировать нижний край диалогового окна вверх. 4. Снова выберите команду AlignіAlign. Выберите Horizontal AlignmentіCenter в параметре Dialog, затем щелкните "мышью" на OK. Данная команда центрирует командные кнопки в диалоговом окне горизонтально. Чтобы использовать инструментальные средства выравнивания, сделайте следующее: 1. Щелкните "мышью" на инструментальном средстве Vertical AlignmentіCenters (вертикальная двунаправленная стрелка - второй элемент слева в нижней строке). Это инструменталь- ное средство вырванивает командные кнопки в одну строку. 2. Щелкните "мышью" на инструментальном средстве дублирова- ние Duplicate (в левом столбце палитры инструментальных средств это второй элемент снизу). В диалоговом окне Form Control Into установите Rows (строки) в 1, Columns (столбцы) в 3, а Order (порядок) в "Left to right" (сле- ва-направо). Щелкните "мышью" на OK. Эта команда распре- деляет кнопки относительно друг-друга. 3. Если в нижней части диалогового окна слишком много места, то можно отбуксировать командные кнопки поближе к серой тени блока и отбуксировать нижний край диалогового окна вверх. 4. В инструментальном средстве Dialog (горизонтальная дву- направленная стрелка с линиями на концах - третий элемент слева в верхней строке) щелкните "мышью" на команде Horizontal AlignmentіCenter. Эта команда центрирует ко- мандные кнопки в диалоговом окне по горизонтали. Сохранение и тестирование проекта ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Итак, вы завершили модификацию диалогового окна New Program Object администратора программ. Чтобы сохранить результаты рабо- ты, выберите команду FileіSave Project. Чтобы проверить модифицированное диалоговое окно в пакете разработчика ресурсов, выберите команду OptionsіTest Dialog или щелкните "мышью" на инструментальном средстве тестирования. Вы можете также запустить программу MYSHELL.EXE из Windows и посмотреть, как выглядит новое диалоговое окно в администраторе программ. Выберите команду FileіRun, затем установите командную строку в "C:\WINDOWS\MYSHELL.EXE" (или укажите маршрут к каталогу Windows, если он не находится на диске C). В этом случае вы фак- тически выполняете вторую "копию" администратора программ. Когда закончите, для возврата к начальной "копии" администратора прог- рамм выберите команду FileіExit Windows. Рекомендации по редактированию ресурсов ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В данном разделе обсуждаются соглашения, которые следует иметь в виду при редактировании ресурсов существующих приложений. Акселераторы ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Если вы добавили акселератор, убедитесь, что он возвращает то же значение идентификатора, что и соответствующая команда ме- ню. Если это не так, то акселератор будет либо выполнять неверную команду, либо не будет ничего делать. Графические изображения ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В приложении вы можете модифицировать графические изображе- ния (битовые массивы), не можете их удалять. Не добавляйте новых графических изображений. В большинстве случаев приложение не сможет их использовать. Курсоры ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В приложении вы можете модифицировать курсоры, не можете их удалять. Не добавляйте новых курсоров. В большинстве случаев приложе- ние не сможет их использовать. Диалоговые окна ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Вы можете изменить позиции элементов диалоговых окон и пре- образовать элементы в соответствующие элементы Borland. При редактировании убедитесь, что вы не изменили тип управ- ляющего элемента, связанного с каждым значением идентификатора. Например, если идентификатор 100 - это кнопка с независимой фик- сацией, не изменяйте ее на кнопку с зависимой фиксацией. Приложе- ние все равно будет интерпретировать ее как кнопку с независимой фиксацией. В большинстве случаев вы можете удалить управляющие элемен- ты, непосредственно связанные с функциональными возможностями приложения. Например, вы можете обычно удалить заголовок, стати- ческий текст и аналогичные элементы, не оказывающие влияние на работу программы, но не можете удалить управляющий элемент редак- тирования, непосредственно влияющий на ее работу. Никогда не добавляйте новые управляющие элементы. Прикладная программа не сможет их использовать. Пиктограммы ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В приложении вы можете модифицировать пиктограммы, не можете их удалять. Не добавляйте новых пиктограмм. В большинстве случаев прило- жение не сможет их использовать. Меню ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В большинстве приложений вы можете безопасно перемещать ко- манды в меню. Однако не следует перемещать команды из одного меню в другое (например, не перемещайте команду Open из меню File в меню Edit). Если вы это сделаете, то может оказаться, что прило- жение не может вывести контекстно-зависимую справку или выб- рать/отменить выбор команды меню. Никогда не изменяйте порядка меню в строке меню. Например, если File является первым пунктом меню, не делайте его вторым. Строковые таблицы ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Будьте аккуратны при редактировании существующих строковых таблиц. Некоторые программы загружают строку в буферы фиксирован- ного размера, и добавление текста к существующей строку может привести к переполнению буфера. Никогда не добавляйте новые строки. Приложение не сможет их использовать. Инструментальные средства, работающие в режиме командной строки: RLINK.EXE, BRCC.EXE и BRC.EXE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данное издание пакета разработчика ресурсов включает в себя три новых ориентированных на ресурсы инструментальных средства, работающих в режиме командной строки: RLINK.EXE, BRCC.EXE и BRC.EXE. RLINK.EXE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД RLINK - это компоновщик ресурсов Windows. В качестве ввода он воспринимает один или более объектов ресурсов (.RES) и один выполняемый файл Windows. Он компонует ресурсы путем корректиров- ки строковых таблиц, пиктограмм и курсоров, а затем связывает эти скомпонованные ресурсы с выполняемым модулем. Наконец, с помощью построения секции предварительной загрузки для загрузчика Windows он пытается ускорить выполнение вашей прикладной программы. RLINK использует следующий синтаксис командной строки: rlink [параметры] <имя_файла>.RES <имя_файла>.EXE RLINK воспринимает следующие параметры: ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД @<имя_файла> Считывает инструкции из заданного командного файла. -d Удаляет ресурс из файла .EXE (файл .RES не за- дается). -e Перемещает используемую по умолчанию DLL в па- мять EMS. -fe<имя_файла> Переименовывает выходной файл .EXE. -fi<имя_файла> Задает дополнительные входные файлы .RES. -k Запрещает непрерывную предзагрузку сегментов и ресурсов в файле .EXE. Сегменты хранятся в том порядке, в котором они следуют в файле .DEF. -l Компилирует приложение, использующее LIM 3.2 EMS. -m Когда Windows выполняется с LIM 4.0, вызывает назначение для каждого экземпляра приложения от- дельного банка EMS bank (флаг Multiple Instance). -p Создает частную DLL (вызываемую только одним приложением), оптимизирует использование памяти в Windows. -t Создает приложение, работающее только в защи- щенном режиме (стандартный режим Windows или улучшенный режим 386). -v Печатает сообщения о ходе выполнения (расширен- ный листинг). -vx Перечисляет ресурсы, но не связывает их с фай- лом .exe. -30 Помечает прикладную программу, как предназначен- ную для Windows 3.0 (или старше). Используется по умолчанию. -31 Помечает прикладную программу, как предназначен- ную для Windows 3.1 (или старше). ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Примеры ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В следующем примере файл .EXE помечается, как предназначен- ный для иcпользуемой по умолчанию версии (3.0), и создается об- ласть предзагрузки. rlink <имя_файла>.EXE Чтобы пометить файл .EXE, как предназначенный для Windows 3.1, параметр следует указать явно: rlink -31 <имя_файла>.EXE В следующем примере с файлом .EXE связывается ресурс в файле .RES, и создается область предзагрузки. rlink <имя_файла>.RES <имя_файла>.EXE В приведенном ниже примере с файлом .EXE связываются ресурсы в двух файлах .RES, и создается область предзагрузки: rlink -fi<имя_файла>.RES <имя_файла>.RES <имя_файла>.EXE Следующий пример комбинирует код программы во входном файле .EXE с ресурсами во входном файле .RES и создает выходной файл .EXE с новым именем, а также область предзагрузки: rlink -fe<имя_файла>.exe <имя_файла>.RES <имя_файла>.EXE В последнем примере ввод считывается из командного файла .RLK. Затем выполняется компоновка с ресурсами в файлах .RES, ко- торые связываются с файлом EXE, и создается область предзагрузки: rlink @<имя_файла>.rlk Командный файл (<имя_файла>.RLK) содержит: -fi<имя_файла>.res -fi<имя_файла>.res <имя_файла>.res <имя_файла>.exe Компилятор BRCC.EXE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД BRCC - это версия компилятора ресурсов пакета разработчика ресурсов, работающая в режиме командной строки. В качестве ввода она воспринимает файл сценария ресурса (.RC) и создает объектный файл (.RES). BRCC использует следующий синтаксис командной стро- ки: brcc [switches] <имя_файла>.RC BRCC воспринимает следующие параметры: ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД -d<имя>[=<строка>] Определяет идентификатор препроцессора. -fo<имя_файла> Переименовывает выходной файл .RES. (По умо- лчанию BRCC создает выходной файл .RES с тем же именем, что и входной файл .RC). -i<маршрут> Добавляет к маршруту поиска входных файлов один или более каталогов (разделенных точкой с запятой). -r Данный параметр игнорируется. Он включен для совместимости с другими компиляторами ресур- сов. -v Выводит сообщения о ходе работы (расширенный вывод сообщений) -x Удаляет текущий маршрут поиска включаемых файлов. -30 Создает файлы .RES, совместимые с Windows 3.0. -31 Создает файлы .RES, совместимые с Windows 3.1. -? или -h Выводит справочную информацию о параметрах. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Как и пакет разработчика ресурсов, компилятор ресурсов BRCC предопределяет общие относящиеся к ресурсу константы Windows как WS_VISIBLE и BS_PUSHBUTTON. Кроме того, определены два специаль- ных относящихся к компилятору идентификатора - RC_INVOKED и WORKSHOP_INVOKED. Эти идентификаторы можно использовать в исход- ном тексте в сочетании с условными операторами препроцессора для управления компиляцией. Например, следующая конструкция сущест- венно увеличивает скорость компиляции: #ifndef WORKSHOP_INVOKED #include "windows.h" #endif Примеры ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В следующем примере к маршруту включаемых файлов добавляется два каталога, и создается файл .RES с тем же именем, что и исход- ный файл .RC: brcc -i<каталог1>;<каталог2> <имя_файла>.RC Следующий пример позволяет вам создавать выходные файлы .RES с именем, отличным от имени входного файла .RC: brcc -fo<имя_файла>.RES <имя_файла>.RC Компилятор BRC.EXE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Компилятор ресурсов Borland (BRC) - это оболочка компилятора ресурсов с высокой степенью совместимости с другими компиляторами ресурсов. Он воспринимает командные строки в формате этих компи- ляторов ресурсов и в зависимости от синтаксиса командной строки вызывает BRCC или RLINK. BRC имеет следующий синтаксис командной строки: brc [параметры] <имя_файла>.RC [<имя_файла>.EXE] BRC воспринимает следующие параметры: ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД -d Определяет идентификатор, который вы можете про- верить с помощью директивы препроцессора #ifdef. -fo<имя_файла> Переименовывает файл .RES. -fe<имя_файла> Переименовывает файл .EXE. -fi<имя_файла> Задает дополнительные входные файлы .RES. -i<маршрут> Добавляет один или более каталогов (разделенных точкой с запятой) к маршруту включаемых файлов. -r Создает только файла .RES. Скомпилированный файл .RES не добавляется к файлу .EXE. -v Печатает сообщения о ходе выполнения (расширен- ный листинг). -x Указывает компилятору, что при поиске включае- мых файлов или файлов ресурсов нужно игнориро- вать переменную операционной среды INCLUDE. -z Пропускает проверки на операторы RCINCLUDE. ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД При указании параметра -r следующие параметры недопустимы: ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД -e Перемещает используемую по умолчанию DLL в па- мять EMS. -k Запрещает непрерывную предзагрузку сегментов и ресурсов в файле .EXE. Сегменты хранятся в том порядке, в котором они следуют в файле .DEF. -l Компилирует приложение, использующее LIM 3.2 EMS. -m Когда Windows выполняется с LIM 4.0, вызывает назначение для каждого экземпляра приложения от- дельного банка EMS bank (флаг Multiple Instance). -p Создает частную DLL (вызываемую только одним приложением), оптимизирует использование памяти в Windows. -t Создает приложение, работающее только в защи- щенном режиме (стандартный режим Windows или улучшенный режим 386). -30 Помечает прикладную программу, как предназначен- ную для Windows 3.0 (или старше). Используется по умолчанию. -31 Помечает прикладную программу, как предназначен- ную для Windows 3.1 (или старше). ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Примеры ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В зависимости от вашей задачи, существует несколько вариаций базового синтаксиса командной строки BRC. Следующий оператор компилирует файл .RC, создает файл .RES и добавляет файл .RES к выполняемому файлу. brc <имя_файла>.RC [<имя_файла>.EXE] BRC автоматически ищет файл .EXE с тем же именем, что и файл .RC. Вам нужно задавать файл .EXE только если его имя отличается от имени файла .RC. В следующем примере создается файл .RES, но не файл .EXE. Если вы укажете имя файла .EXE в командной строке, BRC его игно- рирует. brc -r <имя_файла>.RC В следующем примере компилируется версия Windows 3.1 файла DLL. Вы должны указать в командной строке расширение файла DLL (.DLL, .DRV или .EXE). brc -31 <имя_файла>.DLL В приведенном ниже примере к выполняемому файлу добавляется существующий файл .RES. Имя файла .EXE требуется только в том случае, если оно отличается от имени файла .RES. brc <имя_файла>.RES [<имя_файла>.EXE] СОЗДАНИЕ КЛАССОВ СПЕЦИАЛИЗИРОВАННЫХ УПРАВЛЯЮЩИХ ЭЛЕМЕНТОВ ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Windows обеспечивает классы стандартных управляющих элемен- тов, такие как блоки списка и кнопки с зависимой фиксацией, кото- рые вы можете добавлять в ресурсы своего диалогового окна. В до- полнение к этим стандартным классам пакет разработчика ресурсов позволяет также создавать и использовать классы специализирован- ных управляющих элементов. Ниже описываются функции, необходимые для того, чтобы сделать ваши специализированные управляющие эле- менты доступными для пакета разработчика ресурсов. Описание стандартных управляющих элементов меню а также заг- рузки и использования библиотеки специализированных управляющих элементов вы можете найти в Главе 4 "Руководства пользователя по пакету разработчика ресурсов"). Свои специализированные управляющие элементы вы должны запи- сать в файл библиотеки динамической компоновки (DLL). Примеры ис- пользования описываемых ниже интерфейсных специализированных уп- равляющих элементов в прикладной программе и создания файла DLL можно найти в демонстрационной программе BITBTN на дистрибутивных дисках пакета разработчика ресурсов Resource Workshop. Эти приме- ры поставляются для Паскаля и Си. Файл DLL должен содержать функции, позволяющие пакету разра- ботчика ресурсов работать со стандартными специализированными уп- равляющими элементами Windows. В частности, вы должны реализовать функцию ListClasses и экспортировать ее по имени. Данная функция обеспечивает для пакета разработчика ресурсов информацию о клас- сах специализированных управляющих элементов в DLL. Для каждого специализированного класса управляющих элементов окна вы должны также определить следующие функции: - Info - Style - Flags Эти функции могут иметь любые имена, однако, они должны экс- портироваться DLL, а указатели на них должны передавать в функции ListClasses. Приведенный ниже материал разбит на два раздела, первый из которых предназначен для программистов, работающих на языке Си, а второй - для тех, кто работает на Паскале. Для тех, кто работает на языке Си ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Функция ListClasses ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ListClasses - это реализуемая программистом функция, которая передает информацию о классах специализированных управляющих эле- ментов обратно пакету разработчика ресурсов. Экспорт ListClasses отмечает вашу DLL, как поддерживающую данную спецификацию специа- лизированных управляющих элементов. Если в DLL присутствует функция ListClasses, пакет разра- ботчика ресурсов вызывает эту функцию, передавая информацию о самом себе, а также две используемые в редактировании специализи- рованного управляющего элемента переменные функций-утилит. Функция ListClasses должна возвращать описатель глобальной памяти, выделенный функцией GlobalAlloc. Память, адресуемая по этому описателю, содержит структуру типа CTLCLASSLIST, которая описывает содержащиеся в библиотеке специализированные управляю- щие элементы. Структура CTLCLASSLIST описывается далее. Описатель освобождается пакетом разработчика ресурсов и не должен освобож- даться DLL. Возвращаемое значение: Возвращает глобальный описатель структуры данных. Синтаксис: HGLOBAL CALLBACK ListClasses( LPSTR szAppClass, UINT wVersion, LPFNLOADRES fnLoad, LPFNEDITRES fnEdit); Параметры: szAppClass Имя класса основного окна вызывающей приклад- ной программы. Это имя класса может использо- ваться специализированным управляющим элемен- тов для определения того, выполняется ли он редактором ресурсов. Если szAppClass равно "rwswnd", то вызывающей прикладной программой является пакет разработчика ресурсов. wVersion Номер версии вызывающей прикладной программы. Основной номер версии содержится в старшем байте, а дополнительный - в младшем. Например, версия 1.02 - это 0x0102. Функция Info ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Функция Info вызывается пакетом разработчика ресурсов для получения информации о классе управляющего элемента, включая строку, добавляемую в управляющий элемент-меню, и графическое изображение, добавляемое в палитру инструментальных средств. Функция возвращает описатель памяти, которую можно распределить с помощью функции GlobalAlloc. Этот описатель должен ссылаться на память, содержащую структуру RWCTLINFO. Аналогично функции ListClasses, возвращаемый Info описатель освобождается пакетом разработчика ресурсов и не должен освобождаться DLL. Данная функ- ция вызывается пакетом разработчика ресурсов перед загрузкой DLL. Синтаксис: HGLOBAL CALLBACK Info( void); Параметры: Нет. Структура: Структура RWCTLINFO, определенная с помощью спецификации ти- па typedef в файле CUSTCNTL.H, имеет две основные части: - Первая часть имеет фиксированную длину и обеспечивает ин- формацию о классе управляющего элемента в целом. - Вторая часть представляет собой массив переменной длины с записями фиксированной длины. В каждой записи предусмотре- на информация о конкретном типе или подклассах управляюще- го элемента. /* общие определения размера */ #define CTLTYPES 12 /* число типов управляющих элементов */ #define CTLDESCR 22 /* размер имени управляющего меню */ #define CTLCLASS 20 /* максимальный размер имени класса */ #define CTLTITLE 94 /* максимальный размер текста управляющего элемента */ typedef struct { UINT wVersion; /* версия элемента */ UINT wCtlTypes; /* типы элемента */ char szClass[CTLCLASS]; /* имя класса управляющего элемента */ char szTitle[CTLTITLE]; /* заголовок */ char szReserved[10]; // зарезервировано RWCTLTYPE Type[CTLTYPES]; /* список типов */ } RWCTLINFO; typedef RWCTLINFO *RWPCTLINFO; typedef RWCTLINFO FAR *LPRWCTLINFO; wVersion Номер версии библиотеки специализированных управляющих элементов. Основной номер версии содержится в старшем байте, а дополнительный - в младшем. Например, версия 1.02 - это 0x0102. Это поле в пакете разработчика ресур- сов не используется. wCtlTypes Число подтипов управляющих элементов, опреде- ленных в массиве Type. szClass Имя класса, зарегистрированного в Windows. Оно дублируется из структуры CTLCLASSLIST и сохраняет совместимость снизу-вверх со специ- фикацией специализированных управляющих эле- ментов Windows. szReserved Место, зарезервированное для будущего исполь- зования. Должно очищаться путем записи нуле- вых символов (0). Type Массив структур описания подтипов типа RWCTLTYPE. /* * RWCTLTYPE DATA STRUCTURE * * Эта структура данных возвращается функцией параметров уп- * равляющего элемента, которая запрашивает возможности * конкретного управляющего элемента. Каждый управляющий * элемент может содержать под одним общим классом различные * типы (с предопределенными битами стиля). * * Поле ширины и высоты обеспечивают для прикладной програм- * мы информацию о предлагаемом размере. В значениях данных * полей используются элементы изображения или диагональные * единицы. Если вы используете элементы изображения, уста- * новите старший бит. Если используются диагональные едини- * цы, сбросьте его. * */ typedef struct { UINT wType; /* тип стиля */ UINT wWidth; /* ширина */ UINT wHeight; /* высота */ DWORD dwStyle; /* стиль по умолчанию */ char szDescr[CTLDESCR]; /* имя меню */ HBITMAP hToolBit; // бит. масс. Toolbox HCURSOR hDropCurs; // курсор буксировки } RWCTLTYPE, FAR * LPRWCTLTYPE; wType Определяемое пользователем значение, исполь- зуемое для указания подтипа управляющего эле- мента. Это значение не используется в пакете разработчика ресурсов. wWidth Используемая по умолчанию ширина управляю- щего элемента. Пакет разработчика ресурсов будет использовать это значение, если, напри- мер, управляющий элемент создается путем бук- сировки пиктограммы из палитры инструменталь- ных средств. Если установлен старший бит, wWidth - это координаты диалога (в этом слу- чае значение задается в элементах изображе- ния). Например, значение "32" - это 32 в диа- гональных координатах, но значение "32 і 0x8000" задается в элементах изображения. wHeight Используемая по умолчанию высота управляю- щего элемента. Пакет разработчика ресурсов будет использовать это значение, если, напри- мер, управляющий элемент создается путем бук- сировки пиктограммы из палитры инструменталь- ных средств. Если установлен старший бит, wHeight - это координаты диалога (в этом слу- чае значение задается в элементах изображе- ния). Например, значение "32" - это 32 в диа- гональных координатах, но значение "32 і 0x8000" задается в элементах изображения. wStyle Используемый по умолчанию стиль пакета разра- ботчика ресурсов, который будет использовать- ся для создания окна. Это ключевое поле, ко- торое вы будете использовать для отличия од- ного подтипа от другого. szDescr Описание подтипа управляющей структуры. Дан- ный текст используется пакетом разработчика ресурсов для построения элемента меню, кото- рый пользователь может использовать для соз- дания экземпляра вашего специализированного управляющего элемента. hToolBit Описатель графического изображения, которое будет помещено в палитру инструментальных средств. Пакет разработчика ресурсов требует, чтобы графическое изображение было черным и серым битовым массивом 22x22, содержащим рам- ку толщиной в 2 элемента изображения, белую сверху и черную внизу и справа. В качестве шаблонов вы можете использовать битовые мас- сивы, содержащиеся в BITBTN.RES. hDropCurs Курсор, который должен использоваться во вре- мя буксировки управляющего элемента из палит- ры. Функция Style ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Функция Style позволяет вам редактировать свой управляющий элемент. Сначала в пакете разработчика ресурсов вы должны создать соответствующее диалоговое окно, а затем реализовать булевскую функцию, выводящую данное диалоговое окно. Пакет разработчика ре- сурсов передает этой функции всякий раз, когда вы инициируете запрос к данному окну (порождающему окну для диалога) описатель памяти, содержащей структуру RWCTLSTYLE, и две переменные функции для преобразования строк. Возвращаемое значение: Если пользователь изменил какой-либо параметр управляющего элемента, данная функция возвращает значение TRUE. Если пользова- тель не делал изменений, или они не удались из-за ошибки, то возвращаемым значением будет FALSE. Синтаксис: BOOL CALLBACK Style( HWND hWnd, HGLOBAL hCtlStyle, LPFNSTRTOID lpfnStrToId, LPFNIDTOSTR lpfnIdToStr); Параметры: hWnd Описатель порождающего окна диалогового бло- ка, выводимого данной функцией. hCtlStyle Описатель глобальной памяти, содержащей ре- редактируемую структуру RWCTLSTYLE. lpfnStrToId Переменная функции, преобразующей строку в идентификатор управляющего элемента для поля wId структуры RWCTLSTYLE. Это позволяет поль- зователю ввести идентификатор управляющего элемента, используя идентификатор-константу. Эта подпрограмма вычисляет строку как выраже- ние, возвращая результат. Идентификатор ID можно преобразовать обратно в строку с по- мощью вызова функции lpfnIdToStr. lpfnIdToStr Переменная функции, которая преобразует иден- тификатор управляющего элемента в поле wId структуры RWCTLSTYLE в строку для редактиро- вания. С помощью вызова функции lpfnStrToId идентификатор можно преобразовать обратно в строку. Данная функциональная переменная поз- воляет пользователю вместо значения видеть символьную константу, представляющую иденти- фикатор управляющего элемента. Структура DData: /* * CONTROL-STYLE DATA STRUCTURE * * Функция стиля класса использует эту структуру данных * для установки или сброса различных атрибутов управляющего * элемента. * */ typedef struct { UINT wX; /* x - начало элемента */ UINT wY; /* y - начало элемента */ UINT wCx; /* ширина элемента */ UINT wCy; /* высота элемента */ UINT wId; /* идентификатор дочернего элемента */ DWORD dwStyle; /* стиль элемента */ char szClass[CTLCLASS]; // имя класса элемента char szTitle[CTLTITLE]; /* текст элемента */ BYTE CtlDataSize; /* размер упр. данных */ BYTE CtlData[ CTLDATALENGTH]; /* упр. данные */ } RWCTLSTYLE; typedef RWCTLSTYLE * PRWCTLSTYLE; typedef RWCTLSTYLE FAR * LPRWCTLSTYLE; wX Горизонтальное (X) расположение управляющего элемента в диагональных координатах. wY Вертикальное (Y) расположение управляющего элемента в диагональных координатах. wCx Ширина управляющего элемента в диагональных координатах. wCy Высота управляющего элемента в диагональных координатах. wId Значение идентификатора управляющего элемен- та. Перед выводом данных для редактирования данное значение должно преобразовываться в строку путем вызова функции lpfnIdToStr. Об- ратно в слово для записи оно должно преобра- зовываться путем вызова после редактирования функции lpfnStrToId. dwStyle Флаги стиля управляющего элемента. szClass Имя класса управляющего элемента. szTitle Заголовок управляющего элемента. CtlDataSize Windows позволяет управляющим элементам в файле ресурса иметь до 255 байт определяемых управляющим элементом данных. Данное поле указывает, сколько из этого пространства ис- пользуется управляющим элементом. Данные за- писываются в CtlData. CtlData Данное поле содержит до 255 байт специфичес- ких для управляющего элемента данных. Исполь- зуемый объем должен записываться в поле CtlDataSize. Использование этой области дан- ных определяется пользователем. Когда вы сохраняете свой проект, пакет разработчика ресурсов сохраняет в файле .RC или .RES массив CtlData. Чтобы разрешить доступ управляющего элемента к этому масси- ву, из прикладной программы на этапе выполнения, параметр lParam сообщения WM_CREATE указывается на структуру данных CREATESTRUCT. Структура CREATESTRUCT содержит поле lpCreateParams, указывающее на дополнительные данные, которые вы записываете в массив CtlData. Если указатель имеет значение NULL, то структура CtlData отсутствует. Переменная CtlDataSize вашей программе недоступна. Чтобы сделать размер данных доступных для программы, массив CtlData должен либо содержать фиксированный объема данных, либо его пер- вый байт должен содержать длину данных. Функция Style сначала конвертирует идентификатор ID в стро- ку, передавая числовое значение идентификатора функции LPFNIDTOSTR. Затем функция Style выводит эту строку в диалоговом окне. Если пользователь изменяет возвращаемую LPFNIDTOSTR строку, то функция Style проверяет строку, передавая ее функции LPFNSTRTOID, которая анализирует, является ли строка допустимым выражением-константой. Если LPFNSTRTOID возвращает в LOWORD 0, то идентификатор ID недопустим и +выводится в диалоговом окне, так что пользователь может изменить его на допустимый идентификатор. Если проверка в LPFNSTRTOID прошла успешна, она возвращает в LOWORD ненулевое значение и идентификатор в HIWORD. Функция Flags ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Функция Flags используется пакетом разработчика ресурсов для трансляции стиля управляющего элемента в текст. Пакет разработчи- ка ресурсов вставляет этот текст в редактируемый файл .RC. Функ- ция должна конвертировать только значения, уникальные для управ- ляющего элемента. Например, если вы создавали функцию Flags для класса командных кнопок Windows, вам нужно только проверить млад- шие 16 бит Flags и транслировать их в константу bs_XXXX. Возвращаемое значение: Возвращает число байт, копируемых в целевую строку. Если слово Flags не является допустимым, или строка превышает длину MaxString, то возвращает 0. Синтаксис: UINT CALLBACK Flags(DWORD dwFlags, LPSTR lpStyle, UINT wMaxString); Параметры: dwFlags Стиль управляющего элемента, который должен транслироваться в текст. Это поле получается из поля dwStyle структуры RWCTLSTYLE, переда- ваемой функциональной переменной Style. lpStyle Адрес записи транслируемого текста. wMaxString Максимальное число байт, которые функция Flags может записывать в Style. Для тех, кто работает на языке Паскале ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Функция ListClasses ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД ListClasses - это реализуемая программистом функция, которая передает информацию о классах специализированных управляющих эле- ментов обратно пакету разработчика ресурсов. Экспорт ListClasses отмечает вашу DLL, как поддерживающую данную спецификацию специа- лизированных управляющих элементов. Если ListClasses присутствует в DLL, то пакет разработчика ресурсов вызывает функцию, передавая информацию о самом себе, а также две функциональные переменные-утилиты, используемых в ре- дактировании специализированного управляющего элемента. Функция ListClasses должна возвращать описатель глобальной памяти, выделенный функцией GlobalAlloc. Память, адресуемая по этому описателю, содержит запись типа TCtlClassList, которая опи- сывает содержащиеся в библиотеке специализированные управляющие элементы. Запись TCtlClassList описывается далее. Описатель осво- бождается пакетом разработчика ресурсов и не должен осбовождаться DLL. Синтаксис: function ListClasses(AppName: PChar; Version: Word; Load: TLoad; Edit: TEdit): THandle; export; Возвращаемое значение: Возвращает глобальный описатель глобальной памяти, содержа- щей запись типа TCtlClassList. Параметры: AppName Имя класса основного окна вызывающей приклад- ной программы. Это значение может использо- ваться специализированным управляющим элемен- тов для определения того, выполняется ли он редактором ресурсов. Если AppName равно "rwswnd", то вызывающей прикладной программой является пакет разработчика ресурсов. Version Номер версии вызывающей прикладной программы. Основной номер версии содержится в старшем байте, а дополнительный - в младшем. Напри- мер, версия 1.02 - это $0102. Load Функциональная переменная, которую специали- зированный управляющий элемент может исполь- зовать для получения описания ресурса в про- екте, редактируемого вызывающей прикладной программой. Это эквивалент функции LoadResource в API Windows. Эта функция имеет два параметра - тип ресурса и имя ресурса. Специализированный управляющий элемент от- ветственен за освобождение глобального описа- теля (если он имеется), возвращаемого данной функцией. Edit Функциональная переменная, которую специали- зированный управляющий элемент может исполь- зовать для запуска редактора ресурсов для лю- бого ресурса в проекте, редактируемого паке- том разработчика ресурсов. Эта функция имеет два параметра - тип ресурса и имя ресурса. Записи возвращаемого значения: PCtlClassList = ^TCtlClassList; TCtlClassList = record nClasses: Integer; { Число классов в списке } Classes: array[0..0] of TRWCtlClass; { Список классов } end; TCtlClassList contains a variable number of TRWCtlClass records, the number of which is determined by the nClasses field. PRWCtlClass = ^TRWCtlClass; TRWCtlClass = record fnInfo: TFnInfo; { функция Info } fnStyle: TFnStyle; { функция Style } fnFlags: TFnFlags; { функция Flags } szClass: array[0..ctlClass-1] of Char; { имя класса } end; Каждый класс управляющих элементов в DLL должен соответство- вать записи TRWCtlClass в TCtlClassList. Поле szClass содержит имя, с которым регистрируется класс. Например, если вы вызывали RegisterClass, задавая имя класса как 'MYBUTTON', то szClass должно содержать 'MYBUTTON'. Функциональные переменные Info, Style и Flags (которые соот- ветствуют указателям TFnInfo, TFnStyle и TFnFlags) описаны в сле- дующих разделах. Функция Info ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Функция Info вызывается пакетом разработчика ресурсов для получения информации о классе управляющего элемента, включая строку, добавляемую в управляющий элемент-меню, и графическое изображение, добавляемое в палитру инструментальных средств. Функция возвращает описатель памяти, которую можно распределить с помощью GlobalAlloc. Этот описатель должен ссылаться на память, содержащую запись TRWCtlInfo. Аналогично ListClasses, возвращае- мый Info описатель освобождается пакетом разработчика ресурсов и не должен освобождаться DLL. Данная функция вызывается пакетом разработчика ресурсов перед загрузкой DLL. Синтаксис: function Info: Handle; export; Возвращаемое значение: Возвращает описатель глобальной памяти, содержащей запись типа TRWCtlInfo. Параметры: Нет. Возвращает значение записи: TRWCtlInfo содержит две части: - Первая часть имеет фиксированную длину и обеспечивает ин- формацию о классе управляющего элемента в целом. - Вторая часть представляет собой массив с записями перемен- ной длины. В каждой записи предусмотрена информация о конкретном типе или подклассах управляющего элемента. Каждый класс управляющих элементов включает в себя несколько типов управляющих элементов. Например, Windows предусматривает класс BUTTON, включающий в себя "нажимаемые" командные кнопки, кнопки с независимой фиксацией и кнопки с зависимой фиксацией. Это многообразие может дублироваться вашими классами, обеспечивая в записи TRWCtlInf две или более записи TRWCtlType. Описание TRWCtlInfo имеет вид: PRWCtlInfo = ^TRWCtlInfo; TRWCtlInfo = record wVersion: Word; { версия элемента } wCtlTypes: Word; { типы управляющего элемента } szClass: array[0..ctlClass-1] of Char; { имя управляющего класса } szTitle: array[0..ctlTitle-1] of Char; { заголовок элемента } szReserved: array[0..9] of Char; { зарезервировано } ctType: array[0..ctlTypes] of TRWCtlType; { список типов управляющих элементов } end; wVersion Номер версии библиотеки специализированных управляющих элементов. Основной номер версии содержится в старшем байте, а дополнительный - в младшем. Например, версия 1.02 - это 0x0102. Это поле в пакете разработчика ресур- сов не используется. wCtlTypes Число подтипов управляющих элементов, опреде- ленных в массиве ctType. szClass Имя класса, зарегистрированного в Windows. Оно дублируется из записи TCtlClassList и сохраняет совместимость снизу-вверх со специ- фикацией специализированных управляющих эле- ментов Windows. szReserved Место, зарезервированное для будущего исполь- зования. Должно очищаться путем записи нуле- вых символов (#0). ctType Массив записей описания подтипов типа TRWCtlType. Приведем описание TRWCtlType: PRWCtlType = ^TRWCtlType; TRWCtlType = record wType: Word; { стиль типа } wWidth: Word; { ширина } wHeight: Word; { высота } dwStyle: LongInt; { стиль по умолчанию } szDescr: array[0..ctlDescr-1] of Char; { имя меню } hToolBit: HBitmap; { битовый массив } hDropCurs: HCursor; { курсор буксировки } end; wType Определяемое пользователем значение, исполь- зуемое для указания подтипа управляющего эле- мента. Это значение не используется в пакете разработчика ресурсов. wWidth Используемая по умолчанию ширина управляю- щего элемента. Пакет разработчика ресурсов будет использовать это значение, если, напри- мер, управляющий элемент создается путем бук- сировки пиктограммы из палитры инструменталь- ных средств. Если установлен старший бит, wWidth - это координаты диалога (в этом слу- чае значение задается в элементах изображе- ния). Например, значение "32" - это 32 в диа- гональных координатах. wHeight Используемая по умолчанию высота управляю- щего элемента. Пакет разработчика ресурсов будет использовать это значение, если, напри- мер, управляющий элемент создается путем бук- сировки пиктограммы из палитры инструменталь- ных средств. Если установлен старший бит, wWidth - это координаты диалога (в этом слу- чае значение задается в элементах изображе- ния). Например, значение "32" - это 32 в диа- гональных координатах. wHeight Используемая по умолчанию высота управляю- щего элемента. Пакет разработчика ресурсов будет использовать это значение, если, напри- мер, управляющий элемент создается путем бук- сировки пиктограммы из палитры инструменталь- ных средств. Если установлен старший бит, wHeight - это координаты диалога (в этом слу- чае значение задается в элементах изображе- ния). Например, значение "32" - это 32 в диа- гональных координатах, но значение "32 or $8000" задается в элементах изображения. wStyle Используемый по умолчанию стиль пакета разра- ботчика ресурсов, который будет использовать- ся для создания окна. Это ключевое поле, ко- торое вы будете использовать для отличия од- ного подтипа от другого. szDescr Описание подтипа управляющего элемента. Дан- ный текст используется пакетом разработчика ресурсов для построения элемента меню, кото- рый пользователь может использовать для соз- дания экземпляра вашего специализированного управляющего элемента. hToolBit Описатель графического изображения, которое будет помещено в палитру инструментальных средств. Пакет разработчика ресурсов требует, чтобы графическое изображение было черным и серым битовым массивом 22x22, содержащим рам- ку толщиной в 2 элемента изображения, белую сверху и черную внизу и справа. В качестве шаблонов вы можете использовать битовые мас- сивы, содержащиеся в файле BITBTN.RES. hDropCurs Курсор, который должен использоваться во вре- мя буксировки управляющего элемента из палит- ры. Функция Style ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Функция Style позволяет вам редактировать свой управляющий элемент. Сначала в пакете разработчика ресурсов вы должны создать соответствующее диалоговое окно, а затем реализовать булевскую функцию, выводящую данное диалоговое окно. Пакет разработчика ре- сурсов передает управление этой функции всякий раз, когда вы ини- циируете запрос на редактирование специализированного управляюще- го элемента. Пакет разработчика ресурсов передает функции: описа- тель окна, который является для диалога порождающим, описатель памяти, содержащий запись TRWCtlStyle, и две переменные функции для преобразования строк. Возвращаемое значение: Данная функция должна возвращать true, если запись TRWCtlSytle модифицирована, и false в противном случае. Синтаксис: function Style(Window: HWnd; CtlStyle: THandle; StrToId: TStrToId; IdToStr: TIdToStr): Bool; export; Параметры: Window Описатель порождающего окна диалогового бло- ка, выводимого данной функцией. CtlStyle Описатель глобальной памяти, содержащей ре- редактируемую запись TRWCtlStyle. StrToId Переменная функции, преобразующей строку в идентификатор управляющего элемента для поля wId в TRWCtlStyle. Это позволяет пользователю ввести идентификатор управляющего элемента, используя идентификатор-константу. Эта подп- рограмма вычисляет строку как выражение, возвращая результат. Идентификатор ID можно преобразовать обратно в строку с помощью вы- зова функции IdToStr. IdToStr Переменная функции, которая преобразует иден- тификатор управляющего элемента в поле wId TRWCtlStyle в строку для редактирования. С помощью вызова функции StrToId идентификатор можно преобразовать обратно в строку. Данная функциональная переменная позволяет пользова- телю вместо значения видеть символьную конс- танту, представляющую идентификатор управляю- щего элемента. Запись CtlStyle: Ниже приведен тип записи, адресуемый описателем памяти CtlStyle: PRWCtlStyle = ^TRWCtlStyle; TRWCtlStyle = record wX: Word; { x - начало элемента } wY: Word; { y - начало элемента } wCx: Word; { ширина элемента } wCy: Word; { высота элемента } wId: Word; { идентификатор дочернего управляющего элемента } dwStyle: LongInt; { стиль элемента } szClass: array[0..ctlClass-1] of Char; { имя класса управляющего элемента } szTitle: array[0..ctlTitle-1] of Char; { текст элемента } CtlDataSize: Byte; { размер уп. данных } CtlData: array[0..ctlDataLength-1] of Char; { управл. данные } end; wX Горизонтальное (X) расположение управляющего элемента в диагональных координатах. wY Вертикальное (Y) расположение управляющего элемента в диагональных координатах. wCx Ширина управляющего элемента в диагональных координатах. wCy Высота управляющего элемента в диагональных координатах. wId Значение идентификатора управляющего элемен- та. Перед выводом данных для редактирования данное значение должно преобразовываться в строку путем вызова функции IdToStr. Обратно в слово для записи оно должно преобразовы- ваться путем вызова после редактирования функции StrToId. dwStyle Флаги стиля управляющего элемента. szClass Имя класса управляющего элемента. szTitle Заголовок управляющего элемента. CtlDataSize Windows позволяет управляющим элементам в файле ресурса иметь до 255 байт определяемых управляющим элементом данных. Данное поле указывает, сколько из этого пространства ис- пользуется управляющим элементом. Данные за- писываются в CtlData. CtlData Данное поле содержит до 255 байт специфичес- ких для управляющего элемента данных. Исполь- зуемый объем должен записываться в поле CtlDataSize. Использование этой области дан- ных определяется пользователем. Когда вы сохраняете свой проект, пакет разработчика ресурсов сохраняет в файле .RC или .RES массив CtlData. Чтобы разрешить доступ управляющего элемента к этому масси- ву, из прикладной программы на этапе выполнения, параметр lParam WM_CREATE указывает на структуру данных CREATESTRUCT. Структура CREATESTRUCT содержит поле lpCreateParams, которое является ука- зателем на дополнительные данные, записанные вами в массив CtlData array. Если указатель имеет значение nil, то CtlData от- сутствует. Переменная CtlDataSize вашей программе недоступна. Чтобы сделать размер данных доступных для программы, массив CtlData должен либо содержать фиксированный объема данных, либо его пер- вый байт должен содержать длину данных. Функция Style сначала конвертирует идентификатор ID в стро- ку, передавая числовое значение идентификатора функции IdToStr. Затем функция Style выводит эту строку в диалоговом окне. Если пользователь изменяет возвращаемую IdToStr строку, то функция Style проверяет строку, передавая ее функции StrToId, ко- торая анализирует, является ли строка допустимым выражением-конс- тантой. Если StrToId возвращает в младшем слове 0, то идентифика- тор ID недопустим и выводится в диалоговом окне, так что пользо- ватель может изменить его на допустимый идентификатор. Если про- верка в StrToId прошла успешна, она возвращает в младшем слове ненулевое значение, а в старшем слове - идентификатор. Функция Flags ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Функция Flags используется пакетом разработчика ресурсов для трансляции стиля управляющего элемента в текст. Пакет разработчи- ка ресурсов вставляет этот текст в редактируемый файл .RC. Функ- ция должна конвертировать только значения, уникальные для управ- ляющего элемента. Например, если вы создавали функцию Flags для класса командных кнопок Windows, вам нужно только проверить млад- шие 16 бит Flags и транслировать их в константы bs_XXXX. Возвращаемое значение: Возвращает число байт, копируемых в целевую строку. Если слово Flags не является допустимым, или строка превышает длину MaxString, то возвращает 0. Синтаксис: function Flags(Flags: LongInt; Style: PChar; MaxString: Word): Word; Параметры: Flags Стиль управляющего элемента, который должен транслироваться в текст. Это поле получается из поля dwStyle записи TRWCtlStyle, передава- емой функциональной переменной Style. Style Место записи транслированного текста. MaxString Максимальное число байт, которые функция Flags может записывать в Style. СТИЛИ И КОМАНДНЫЕ КНОПКИ ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Здесь представлены соглашения по стилям, которые вы должны соблюдать при проектировании для диалоговых окон своей работающей в Windows прикладной программе специализированных управляющих элементов Borland (Borland Windows Custom Control - BWCC). Вопросы разметки ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Перед тем, как вы начнете проектировать диалоговые окна, следует учитывать некоторые основные положения. Панели ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Каждое диалоговое окно имеет две панели (области) - основную панель Main и оперативную панель Action. Основная панель содержит все элементы, которые считываются или модифицируются при открытии диалогового окна. Оперативная панель содержит командные кнопки, обычно OK, Cancel и Help. Шрифты ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Диалоги Borland используют шрифт Helvetica Bold размером в 8 пунктов. Диалоговые управляющие элементы BWCC лучше всего выгля- дят при использовании данного шрифта. Размер в 8 пунктов - это маленький размер; используйте его, чтобы размер ваших диалогов не был слишком велик. Естественно, для специализированных диалоговых управляющих элементов, вы можете применять и другие шрифты. Групповые блоки ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Соберите все параметры, выводимые в основной панели, в груп- повом блоке BWCC. Например, поместите в групповой блок связанные кнопки с независимой фиксацией. В групповой блок следует также помещать каждый отдельный элемент, такой как текстовый блок имени файла или комбинированный блок. С блоком списка Borland этого де- лать не нужно, поскольку он рисует свою собственную рамку. Командные кнопки ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Для стиля командных кнопок учитывается следующее: - В командных кнопках Borland используются маленькие графи- ческие образы. Примером может быть образ с левой стороны. - Для текста кнопок используйте шрифт Helvetica (нормальный, а не жирный) и выравнивайте его вправо. - Для высоты каждой командный кнопки используйте размер 39 элементов изображения для разрешающей возможности VGA и 30 для EGA. - Большинство командных кнопок имеет и для VGA, и для EGA, размер 63 элемента изображения. Хотя для предотвращения перекрытия текста и графического изображения вы можете сделать кнопку шире, по возможности ширину следует ограни- чить указанным размером. Рекомендации по размера и выравниванию ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Ниже представлены рекомендации по расположению управляющих элементов в диалоговом окне BWCC. Упорядочивание панелей ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Основная панель вашего диалогового окна должна иметь по воз- можности больший размер, чтобы вместить все управляющие элементы. Оперативная панель должна быть достаточно велика, чтобы вместить все командные кнопки; ее следует разместить внизу или в правой части диалогового окна. Законченное окно следует сделать по возможности квадратным. Если основная панель больше в ширину, чем в высоту, поместите оперативную панель в нижнюю часть диалогового окна. Если основная панель больше в высоту, чем в ширину, поместите оперативную па- нель с правой стороны. Основная панель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Групповые блоки в основной панели вы можете упорядочить в один столбец, строку или массив. Приведем некоторые рекомендации по упорядочиванию групповых блоков в основной панели. Заголовки следует рассматривать как часть групповых блоков. - Соблюдайте для групповых блоков разрядку (вертикальную и горизонтальную) в 8 диагональных единиц. - С каждого края диалогового окна (до ближайшего группового блока) оставляйте поле размером в 8 диагональных единиц. - В столбце групповых блоков делайте их одного размера. Ши- рина должна соответствовать самому широкому элементу или заголовку. Для соответствия расширьте другие групповые блоки. - В строке групповых блоков вы можете изменять высоту груп- пового блока. Выровняйте верхние части групповых блоков, а нижние их границы оставьте различными. - Если некоторые из групповых блоков, которые вы хотите вы- ровнять в строке, имеют заголовки, а другие их не имеют, выровняйте вершины групповых блоков относительно друг дру- га без учета заголовков. Для таких смешанных групп блоков поле над групповыми блоками без заголовков должно включать в себя пространство для заголовка. - Если некоторые из групповых блоков, которые вы хотите вы- ровнять в строке, выше других, вычислите нижнюю границу по самому высокому блоку. Горизонтальная оперативная панель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Оперативная панель, которая выводится в нижней части диало- га, представляет собой горизонтальную оперативную панель. Она за- нимает всю ширину диалога. Приведем следующие рекомендации: - Сделайте оперативную панель достаточно высокой, чтобы она содержала командные кнопки, и оставьте над и под командны- ми кнопками поле в 8 диагональных единиц. - Равномерно распределите командные кнопки вдоль оперативной панели, оставив минимум 8 диагональных единиц между самими командными кнопками и между кнопками и левым и правым кра- ем диалогового окна. Постарайтесь использовать одно и то же число диалоговых единиц между каждой командной кнопкой оперативной панели и между кнопками и левым и правым краями диалогового окна. При необходимости вы можете оставить больше места между командными кнопками, чем между краями и командными кнопка- ми, но два поля должны быть одинаковыми, а пространcтво между кнопками следует сделать равным. Вертикальная оперативная панель ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Эта оперативная панель выводится в правой части диалогового окна. Она занимает всю высоту диалогового окна. Дадим следующие рекомендации. - Сделайте оперативную панель достаточно широкой, чтобы она содержала командные кнопки, и оставьте справа и слева от командных кнопок поле в 8 диагональных единиц. - Равномерно распределите командные кнопки вдоль оперативной панели, оставив минимум 8 диагональных единиц между самими командными кнопками и между кнопками и верхним и нижним краем диалогового окна. Постарайтесь использовать одно и то же число диалогональ- ных единиц между каждой командной кнопкой оперативной па- нели и между кнопками и верхним и нижним краями диалогово- го окна. При необходимости вы можете оставить больше места между командными кнопками, чем между краями и командными кнопками, но два поля должны быть одинаковыми, а прост- ранcтво между кнопками следует сделать равным. Заголовки групповых блоков ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Заголовки групповых блоков идентифицируют содержимое этих блоков. По умолчанию заголовок группового блока в диалоговом окне Borland имеет серый фон. К групповым блокам применимы следующие рекомендации: - Если групповой блок содержит несколько управляющих элемен- тов, поместите заголовок группового блока непосредственно над верхним его краем. - Если групповой блок содержит один управляющий элементов, поместите заголовок группового блока непосредственно над верхним краем группового блока. - Если групповой блок содержит единственный текстовый блок или комбинированный блок, поместите заголовок слева от уп- равляющего элемента и на 4 единицы от края группового бло- ка, либо разместите его над управляющим элементом. - Если групповой блок содержит два или более редактируемых текстовых поля или комбинированных блока (или и то, и дру- гое), то перед каждым из них следует указать короткую мет- ку. - Выровняйте заголовки групповых блоков, расположенных выше этих блоков. - Используйте для всех заголовков групповых блоков высоту 9 единиц. - Сделайте заголовки той же ширины, что и групповые блоки. Элементы групповых блоков ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Следующие рекомендации помогут вам упорядочить элементы в групповом блоке: - Распределите управляющие элементы в групповом блоке верти- кально через каждые 13 единиц от низа одной строки текста до низа следующей. - Выровняйте управляющие элементы влево. - Оставьте левые и правые поля между краями группового блока и самым широким управляющим элементом размером в 4 диаго- нальных единицы. - Оставьте поля между верхом группового блока и первым уп- равляющим элементом в группе размером в 4 диагональных единицы. - Оставьте поля между низом группового блока и последним уп- равляющим элементом в группе размером в 4 диагональных единицы. - Если групповой блок содержит одно или более текстовых ре- дактируемых полей или комбинированных блоков (или и то, и другое), сделайте их одной ширины. Распределите их так, чтобы нижний находился в 13 единицах от нижнего края сле- дующего. Выровняйте эти управляющие элементы в групповом блоке справа с расстоянием 4 единицы от правого края. Вы- ровняйте влево заголовки, оставив поле в 4 единицы. Сде- лайте групповой блок достаточно большим, чтобы оставить 4 единицы между самым длинным заголовком и его управляющим элементом. Блоки сообщений ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Аналогично диалоговым блокам, блоки сообщений имеют две па- нели - основную и оперативную. Основная панель блока сообщения заполняется единственным групповым блоком, который содержит графический значок изображения и текстовую область. При проектировании блока сообщения соблюдайте следующие ре- комендации: - Поместите графический значок с левой стороны от группового блока. - Со всех четырех сторон группового блока оставьте поле в 8 диагональных единицы. - Отделите графический значок и область текста пространством в 8 диалоговых единиц. - Сцентрируйте область текста вертикально, оставив 8 диало- говых единиц между верхом и низом области текста и верхни- ми и нижними краями диалога. - Поместите оперативную область в нижнюю часть диалога. - Запишите в эту разметку текст, используя самую длинную строку сообщения. Если необходимо, измените соответственно размер текстовой области. Проверка вашего диалога ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД При вычислении диалоговых единиц Windows округляет результа- ты вычисления. Ошибки округления могут повлиять на вывод вашего диалогового окна. Аккуратно проверьте диалог. Следует отметить следующие проблемы: - Конфликт между заголовком текста и верхом группового бло- ка. - Очевидно неравные интервалы в вертикальной группе кнопок с независимой или зависимой фиксацией. - Неправильная граница в выводимых областях панели. Обычно настройка в 1 диалоговую единицу устраняет эти проб- лемы. Иногда в большой группе повторяющихся диалоговых элементов могут произойти две или более ошибки округления. В одних случаях улучшить разметку ваших диалогов может настройка, в других случа- ях вы можете решить, что изменений вносить не нужно. Решайте на свое усмотрение. При проверке диалогового окна вы не можете сказать, сколько текста будет выводиться при редактировании вашего диалога. В эту категорию попадает редактируемый текст, большие статические текс- товые поля и комбинированные блоки. Чтобы обеспечить, что текст во время выполнения не будет обрезаться, возможно, вам придется изменить первоначальную схему. Использование стандартных командных кнопок ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командные кнопки оперативной панели указывают на завершение работы пользователя с диалогом, но могут также служить основным отправным пунктом для функции диалогового окна, такой как вывод справочной информации по командной кнопке Help. Приложение может также иметь командные кнопки, не приводящие к закрытию. С помощью этих командных кнопок пользователь может выполнять определенные действия, но продолжать работать с диало- говым окном. Группы этих командных кнопок часто имеют родственные функции. Например, диалоговое окно Search может содержать в оператив- ной панели командные кнопки Find Next и Replace. Для стандартных командных кнопок соблюдайте следующие реко- мендации: - Поместите эти командную кнопку в основную панель, а не в оперативную панель. - Не помещайте эти командные кнопки в групповой блок. Раз- местите их непосредственно не поверхности основного окна. - Сделайте все командные кнопки в группе одной ширины. Они должны быть достаточно широки, чтобы вместить наибольшую текстовую строку. - Сделайте командные кнопки высотой в 14 диагональных еди- ниц. - Постарайтесь ограничить текст 20 символами или меньше. - Выровняйте кнопки в столбец или в строку, в зависимости от того, что в вашем диалоге выглядит лучше. - Слева и справа от столбца командных кнопок оставьте 8 диа- гональных единиц. Вертикальный интервал между командными кнопками и другими управляющими элементами выше или ниже командных кнопок должен быть одинаковым. - Оставьте 8 диагональных единиц выше и ниже строки команд- ных кнопок. Горизонтальные интервалы между командными кнопками и другими управляющими элементами слева или спра- ва от командных кнопок должны быть одинаковы. ТЕХНИЧЕСКИЕ АСПЕКТЫ СПЕЦИАЛИЗИРОВАННЫХ УПРАВЛЯЮЩИХ ЭЛЕМЕНТОВ BORLAND (BWCC) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Здесь содержится информация, которая может оказаться полез- ной и интересной для продвинутого разработчика ресурсов. Однако вы можете успешно создать или модифицировать прикладные ресурсы для BWCC, используя информацию, содержащуюся в файле MANUAL.RW. Определение производного диалогового класса ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Чтобы создать свой собственный диалоговый класс окна (напри- мер, если вы хотите, чтобы диалоговое окно имело свою собственную пиктограмму), вы должны построить класс, "производный" от класса BORDLG. Чтобы получить класс, производный от BORDLG, сделайте следу- ющее: 1. Задайте имя класса окна, которое начинается с "bordlg". Имя класса начинается с предшествующего символа подчерки- вания ("_bordlg..."), а само имя "bordlg" резервируется для использования Borland. Таким образом, "bordlg_foo" - это допустимое производное имя, а "mybordlg" или "_bordlg_mine" - нет. 2. Для сообщений, которые она не обрабатывает, функция ваше- го диалогового окна должна вызывать BWCCDefDlgProc, а не стандартную функцию Windows. 3. Процедура окна вызывает BWCCDefDlgProc для следующих со- общений: WM_CTLCOLOR WM_NCCREATE WM_CREATE WM_NCDESTROY WM_SETFONT WM_PAINT WM_ERASEBKGND Техническое описание специализированных управляющих элементов Borland ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В следующих 4 разделах содержится описание каждого класса специализированных управляющих элементов Borland. Большинство подзаголовков говорят сами за себя, поэтому поясним лишь следую- щие: - "Имя класса" задает имя пакета разработчика ресурсов (Resource Workshop) в кавычках, за которым следует имя идентификатора - определение Cи или константа Паскаля. - Раздел "Стили окна" включает подразделы "Типы" и "Парамет- ры". Типы определяют внешний вид и функциональные возмож- ности управляющего элемента. - Раздел "Сообщения включает" включает подразделы "Команды" и "Уведомления". Команды - это сообщения, передаваемые уп- равляющему элементу. Уведомления - это специальный тип со- общения WM_COMMAND, используемого управляющими элементами. Идентификатор управляющего элемента для командной кнопки передается в wParam сообщения, а lParam содержит и тип уведомления, и описатель окна управляющего элемента. Тип уведомления содержится в старшем слове lParam и может быть выделен с помощью макрокоманды HIWORD; описатель окна со- держит в младшем слове lParam и может выделяться с помощью макрокоманды LOWORD. Управляющий элемент BORBTN ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Функция: "нажимаемые" командные кнопки с графическим изобра- жением и "накладываемые" панели. Имя класса: "borbtn" (BUTTON_CLASS) Стили окна ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Типы, наследуемые из стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД BS_DEFPUSHBUTTON и BS_PUSHBUTTON ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Эти типы определяют два стандартных типа командных кнопок Windows: - BS_DEFPUSHBUTTON - BS_PUSHBUTTON Тип BS_DEFPUSHBUTTON идентифицирует "используемую по умолча- нию" командную кнопку. Когда пользователь нажимает в диалоговом окне клавишу Enter, то используемый по умолчанию идентификатор кнопки, находится в wParam сообщения WM_COMMAND, посылаемого по- рождающему окну кнопки. Администратор сообщений Windows посылает от кнопки диалогового окна уведомление BN_CLICKED. Имеется два исключения: - Если фокус перемещен с помощью нажатия Tab на клавиатуре на другую командную кнопку, то она временно становится ис- пользуемой по умолчанию, и уведомление BN_CLICKED ссылает- ся на нее. - Если фокус перемещен на редактируемый управляющий элемент, для которого установлен флаг ES_WANTRETURN, то клавиша Enter вставляет в текст редактируемого элемента возврат каретки. Типы, уникальные для BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД BBS_BITMAP ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данный тип используется для вывода "накладываемых панелей", представляющих собой графические изображения, с которыми пользо- ватель не взаимодействует. Параметры, наследуемые от стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Отсутствуют. Параметры, уникальные для BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД BBS_PARENTNOTIFY ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данный параметр приводит к генерации на этапе выполнения следующих уведомлений: - BBN_SETFOCUS - BBN_SETFOCUSMOUSE - BBN_GOTATAB - BBN_GOTABTAB Эти уведомления описаны ниже. BBS_OWNERDRAW ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данный параметр вызывает посылку управляющим элементом на этапе выполнения своему порождающему окну сообщения WM_DRAWITEM, которое приводит к специализированному отображению. BBS_DLGPAINT ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Класс специализированных диалоговых элементов использует данный параметр для информирования кнопки о том, что диалоговый класс будет рисовать кнопку. Этот параметр предназначен только для внутреннего использования BWCC. Сообщения ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Команды, наследуемые из стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД BM_SETSTYLE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Диалоговый администратор Windows использует данное сообщение для переключения между типами BS_DEFPUSHBUTTON и BS_PUSHBUTTON. BM_SETSTATE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данное сообщение изменяет состояние "подсветки" командной кнопки. Если параметр сообщения wParam ненулевой, то командная кнопка подсвечивается (отображается а нажатом состоянии). BM_GETSTATE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данное сообщение определяет, является ли кнопка подсвечен- ной. Оно возвращает ненулевое значение при подсветке кнопки и 0, когда кнопка не подсвечивается. Команды, уникальные для BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД BBM_SETBITS ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Прикладная программа использует данное сообщение для переда- чи командной кнопке описателей битовых массивов (графических изображений). Обычно командные кнопки используют для автоматичес- кой загрузки битовых массивов из пользовательских ресурсов иден- тификатору управляющей кнопки. Если битовый массив не существует, то заголовок кнопки рисуется в используемом по умолчанию битовом массиве с более легким весом диалогового шрифта. Чтобы использовать данное сообщение, нужно сначала создать для отдельной кнопки три битовых массива: - кнопка без перемещенного на нее с помощью клавиатуры фоку- са; - кнопка с перемещенным на нее с помощью клавиатуры фокусом, но не "нажатая"; - "нажатая" (подсвеченная) кнопка. После создания битовых массивов (графических изображений) вы должны поместить описатели этих графических изображений в массив и передать указатели far на этот массив в параметре lParam сооб- щения BM_SETBITS. Следующие примеры на Си и Паскале показывают, как это дела- ется: Пример на Си: HBITMAP hBits[3]; HWND hWndButton = GetDlgItem( hWnd, ID_FOO); hBits[0] = MakeNormalBitmap(...); hBits[1] = MakeHighlightBitmap(...); hBits[2] = MakeFocusBitmap(...); SendMessage( hWndButton, BBM_SETBITS, 0, (LONG) (LPSTR) hBits); Пример на Паскале: procedure SetBitmaps(Wnd: HWnd); var Bits: array[0..2] of HBitmap; WndButton: HWnd; begin WndButton := GetDlgItem(Wnd, id_Foo); Bits[0] := MakeNormalBitmap(...); Bits[1] := MakeHighlightBitmap(...); Bits[2] := MakeFocusBitmap(...); SendMessage(WndButton, BBM_SETBITS, 0, @@Bits); end; Примечание: Если графическое изображение командной кнопки инициализируется таким образом, то прикладная программа должна уничтожать эти битовые массивы путем вызова перед завершением функции DeleteObject. Прикладная программа обычно делает этот вы- зов с помощью описателя сообщения WM_DESTROY для командной кнопки порождающего окна. Уведомления, наследуемые из стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Сообщение BN_CLICKED ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает данное сообщение, когда она "нажи- мается" пользователем с помощью кнопки "мыши" при перемещении на нее указателя или с помощью следующих действий клавиатуры: - Пользователь нажимает клавишу пробела или Enter при пере- мещении на кнопку фокуса. - Пользователь нажал оперативные клавиши кнопки, когда фокус находится на другом управляющем элементе. Чтобы связать с командной кнопкой оперативную клавишу, по- местите перед значением ASCII клавиши текста кнопки символ & (например, "&Yes"). Заметим, что регистр буквы здесь значения не имеет. Уведомления, уникальные для BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Если вы определили стиль BBS_PARENTNOTIFY, то доступны сле- дующие уведомления. BBN_SETFOCUS ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает это уведомление своему порождающе- му окну, когда с помощью действий, отличных от нажатия кнопки "мыши", на него перемещается фокус. BBN_SETFOCUSMOUSE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает это уведомление своему порождающе- му окну, когда на него перемещается фокус с помощью нажатия кноп- ки "мыши". BBN_GOTATAB ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает это уведомление своему порождающе- му окну, когда пользователь нажимает клавишу Tab, а фокус нахо- дится на командной кнопке. После этого порождающее окно может вмешаться в обработку нажатия клавиши, возвращая ненулевое значе- ние. BBN_GOTABTAB ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает это уведомление своему порождающе- му окну, когда пользователь нажимает клавишу клавиши Shift-Tab (обратная табуляция), а фокус находится на командной кнопке. Пос- ле этого порождающее окно может вмешаться в обработку нажатия клавиши, возвращая ненулевое значение. Сообщение WM_DRAWITEM ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Если вы задали для командной кнопки стиль BBS_OWNERDRAW, она посылает своему порождающему окну сообщение WM_DRAWITEM, Параметр lParam этого сообщения содержит указатель far на структуру DRAWITEMSTRUCT. Поля данной структуры описываются в документации SDK Windows по данному сообщению, но здесь внесены следующие усовершенствова- ния: Для командных кнопок, отображаемых Windows, поле itemID структуры DRAWITEMSTRUCT не используется. Кнопки Borland исполь- зуют это поле для передачи своего типа. Если кнопка является кнопкой, используемой по умолчанию, то данное поле содержит зна- чение BS_DEFPUSHBUTTON. В противном случае оно содержит значение BS_PUSHBUTTON. Другими полями и передаваемыми в них значениями являются: CtlType ODT_BUTTON CtlID Идентификатор управляющего элемента для кнопки (GetWindowWord(hWnd, GWW_ID)). itemAction ODA_DRAWENTIRE, пока фокус не изменится и не приведет к переотображению. В этом случае поле содержит ODA_FOCUS. itemState Комбинация следующих значений, в зависимости текущего состояния командной кнопки: ODS_FOCUS если с помощью клавиатуры на кнопку перемещен фокус. ODS_DISABLED если кнопка запрещена. ODS_SELECTED если командная кнопка подсвече- на. hwndItem Описатель окна управляющего элемента. hDC Контекст устройства для окна. Все значения в состоянии по умолчанию возвращаются GetDC. rcItem Прямоугольная область клиента для управляющего элемента. Схема нумерации идентификатора ресурса командной кнопки ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД При анализе шаблона структуры данных диалога Windows компи- лятор ресурсов Microsoft не предусматривает определяемых пользо- вателем данных инициализации управляющего элемента. В связи с этим пакет разработчика ресурсов Resource Workshop использует идентификатор управляющего элемента в качестве базы для получения идентификатора ресурса. Для каждой графической кнопки имеется шесть графических образов; три для EGA и монохромных устройств и три для VGA и устройств с высокой разрешающей способностью. Идентификаторы ресурсов битовых массивов получаются для ко- мандной кнопки с помощью следующих формул: Control ID + 1000: графический образ с разрешением VGA; нор- мальное состояние Control ID + 3000: графический образ с разрешением VGA; нажа- тое состояние Control ID + 5000: графический образ с разрешением VGA; фокус Control ID + 2000: графический образ с разрешением EGA; но- рмальное состояние Control ID + 4000: графический образ с разрешением EGA; на- жатое состояние Control ID + 6000: графический образ с разрешением EGA; фокус где Control ID - идентификатор управляющего элемента. Управляющий элемент BORRADIO ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Функция: лучшее представление кнопок с зависимой фиксацией. Имя класса: "borradio" (RADIO_CLASS) Стили окна ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Типы, наследуемые из стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Тип BS_RADIOBUTTON ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Неавтоматическая кнопка с зависимой фиксацией. Эта кнопка через уведомление BN_CLICKED просто информирует прикладную прог- рамму, что она "выбрана" (нажата). Прикладная программа ответс- твенна за вызов функции CheckRadioButton для изменения состояния командной кнопки и состояния других сгруппированных с ней кнопок. Тип BS_AUTORADIOBUTTON ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Автоматическая кнопка с зависимой фиксацией. Когда пользова- тель выбирает одну из этих кнопок, она автоматически маркируется (кружком или ромбом), а ранее выбранная кнопка группы становится невыбранной без вмешательства прикладной программы. Типы, уникальные для BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Отсутствуют. Параметры, наследуемые из стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Параметр BS_LEFTTEXT ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данный параметр приводит к выводу связанного с командной кнопкой текста слева от кнопки, а не справа от нее. Параметры, уникальные для BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Параметр BBS_PARENTNOTIFY ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данный параметр приводит к тому, что на этапе выполнения ге- нерируются следующие уведомляющие сообщения: - BBN_SETFOCUS - BBN_SETFOCUSMOUSE - BBN_GOTATAB - BBN_GOTABTAB Данные уведомления описаны выше. Параметр BBS_OWNERDRAW ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данный параметр приводит к передаче управляющим элементом на этапе выполнения сообщения WM_DRAWITEM своему порождающему окну для специализированного отображения. Параметр BBS_DLGPAINT ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Класс специализированных диалоговых BWCC использует этот па- раметр для информирования командной кнопки, что данных диалоговый класс будет раскрашивать кнопку. Данный параметр предназначен только для внутреннего использования в BWCC. Сообщения ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Команды, наследуемые из стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД BM_GETCHECK ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данное сообщение приводит к возврату командной кнопкой ее текущего "выбранного" состояния (во всех именах сообщений и опи- сания используется специфика кнопки с независимой фиксацией). Ес- ли кнопка выбрана (нажата), то она возвращает ненулевое значение. В противном случае возвращается 0. Сообщение BM_SETCHECK ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данное сообщение изменяет состояние командной кнопки (выбра- на/не выбрана). Если параметр wParam сообщения отличен от нуля, то кнопка выбрана (заполнена кружком или ромбом). Сообщение BM_GETSTATE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данное сообщение определяет, будет ли командная кнопка "подсвечена" (рисуется с жирным контуром вокруг кружка или ром- ба). Оно возвращает ненулевое значение при подсветке кнопки и 0, когда кнопка не подсвечивается. Сообщение BM_SETSTATE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данное сообщение изменяет состояние подсветки командной кнопки. Если параметр wParam сообщения ненулевой, то кнопка подс- вечивается. Команды, уникальные для BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Отсутствуют. Уведомления, наследуемые из стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Сообщение BN_CLICKED ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает данное сообщение, когда она "нажи- мается" пользователем с помощью кнопки "мыши" при перемещении на нее указателя или с помощью следующих действий клавиатуры: - Пользователь нажимает клавишу пробела или Enter при пере- мещении на кнопку фокуса. - Пользователь нажал оперативные клавиши кнопки, когда фокус находится на другом управляющем элементе. Чтобы связать с командной кнопкой оперативную клавишу, по- местите перед значением ASCII клавиши текста кнопки символ & (например, "&Yes"). Заметим, что регистр буквы здесь значения не имеет. Уведомления, уникальные для BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Следующие уведомления посылаются порождающему окну только, если программист задал стиль BBS_PARENTNOTIFY. - BBN_SETFOCUS - BBN_SETFOCUSMOUSE - BBN_GOTATAB - BBN_GOTABTAB BBN_SETFOCUS ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает это уведомление своему порождающе- му окну, когда с помощью действий, отличных от нажатия кнопки "мыши", на него перемещается фокус. BBN_SETFOCUSMOUSE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает это уведомление своему порождающе- му окну, когда на него перемещается фокус с помощью нажатия кноп- ки "мыши". BBN_GOTATAB ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает это уведомление своему порождающе- му окну, когда пользователь нажимает клавишу Tab, а фокус нахо- дится на командной кнопке. После этого порождающее окно может вмешаться в обработку нажатия клавиши, возвращая ненулевое значе- ние. BBN_GOTABTAB ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает это уведомление своему порождающе- му окну, когда пользователь нажимает клавишу клавиши Shift-Tab (обратная табуляция), а фокус находится на командной кнопке. Пос- ле этого порождающее окно может вмешаться в обработку нажатия клавиши, возвращая ненулевое значение. WM_DRAWITEM ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Если вы задали для командной кнопки стиль BBS_OWNERDRAW, она посылает своему порождающему окну сообщение WM_DRAWITEM, Параметр lParam этого сообщения содержит указатель far на структуру DRAWITEMSTRUCT. Поля данной структуры описываются в документации SDK Windows по данному сообщению, но здесь внесены следующие усовершенствова- ния: Для автоматических кнопок с зависимой фиксацией поле itemID структуры DRAWITEMSTRUCT содержит значение BS_AUTORADIOBUTTON. В противном случае оно содержит значение BS_RADIOBUTTON. Другими полями и передаваемыми в них значениями являются: CtlType ODT_BUTTON CtlID Идентификатор управляющего элемента для кнопки (GetWindowWord(hWnd, GWW_ID)). itemAction ODA_DRAWENTIRE, пока не изменение фокуса не приведет к переотображению. В этом случае поле содержит ODA_FOCUS. itemState Комбинация следующих значений, в зависимости текущего состояния командной кнопки: ODS_FOCUS если с помощью клавиатуры на кнопку перемещен фокус. ODS_DISABLED если кнопка запрещена. ODS_SELECTED если командная кнопка подсвече- на. hwndItem Описатель окна управляющего элемента. hDC Контекст устройства для окна. Все значения в состоянии по умолчанию возвращаются GetDC. rcItem Прямоугольная область клиента для управляющего элемента. Управляющий элемент BORCHECK ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Функция: лучшее представление кнопок с независимой фиксаци- ей. Имя класса: "borcheck" (CHECK_CLASS) Стили окна ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Типы, наследуемые из стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД BS_CHECKBOX ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Неавтоматическая кнопка с независимой фиксацией (блок про- верки). Для изменения ее визуального состояния после щелчка кноп- кой мыши на этом элементе требуется вмешательство прикладной программы. BS_AUTOCHECKBOX ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Кнопка с независимой фиксацией, который автоматически изме- няет свое состояние при щелчке на ней кнопкой "мыши". Типы, уникальные BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Отсутствуют. Параметры, наследуемые из стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Параметр BS_LEFTTEXT ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данный параметр приводит к выводу связанного с командной кнопкой текста слева от командной кнопки, а не справа от нее. Параметры, уникальные для BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Параметр BBS_PARENTNOTIFY ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данный параметр приводит к тому, что на этапе выполнения ге- нерируются следующие уведомляющие сообщения: - BBN_SETFOCUS - BBN_SETFOCUSMOUSE - BBN_GOTATAB - BBN_GOTABTAB Данные уведомления описаны выше. Параметр BBS_OWNERDRAW ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данный параметр приводит к передаче управляющим элементом на этапе выполнения сообщения WM_DRAWITEM своему порождающему окну для специализированного отображения. Параметр BBS_DLGPAINT ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Класс специализированных диалоговых BWCC использует этот па- раметр для информирования командной кнопки, что данных диалоговый класс будет рисовать кнопку. Данный параметр предназначен только для внутреннего использования в BWCC. Сообщения ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Команды, наследуемые из стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Сообщение BM_GETCHECK ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данное сообщение приводит к возврату командной кнопкой ее текущего "выбранного" состояния. Если кнопка выбрана (нажата), то она возвращает ненулевое значение. В противном случае возвращает- ся 0. Сообщение BM_SETCHECK ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данное сообщение изменяет состояние командной кнопки (выбра- на/не выбрана). Если параметр wParam сообщения отличен от нуля, то кнопка отображается с отметкой. Сообщение BM_GETSTATE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Это сообщение определяет, будет ли командная кнопка "подсве- чена" (рисуется с жирным контуром). Оно возвращает ненулевое зна- чение при подсветке кнопки и 0, когда кнопка не подсвечивается. Сообщение BM_SETSTATE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данное сообщение изменяет состояние подсветки командной кнопки. Если параметр wParam сообщения ненулевой, то кнопка подс- вечивается. Команды, уникальные для BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Отсутствуют. Уведомления, наследуемые из стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Сообщение BN_CLICKED ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает данное сообщение, когда она "нажи- мается" пользователем с помощью кнопки "мыши" при перемещении на нее указателя или с помощью следующих действий клавиатуры: - Пользователь нажимает клавишу пробела или Enter при пере- мещении на кнопку фокуса. - Пользователь нажал оперативный клавиши кнопки, когда фокус находится на другом управляющем элементе. Чтобы связать с командной кнопкой оперативную клавишу, по- местите перед значением ASCII клавиши текста кнопки символ & (например, "&Yes"). Заметим, что регистр буквы здесь значения не имеет. Уведомления, уникальные для BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Следующие уведомления посылаются порождающему окну только, если программист задал стиль BBS_PARENTNOTIFY. - BBN_SETFOCUS - BBN_SETFOCUSMOUSE - BBN_GOTATAB - BBN_GOTABTAB BBN_SETFOCUS ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает это уведомление своему порождающе- му окну, когда с помощью действий, отличных от нажатия кнопки "мыши", на него перемещается фокус. BBN_SETFOCUSMOUSE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает это уведомление своему порождающе- му окну, когда на него перемещается фокус с помощью нажатия кноп- ки "мыши". BBN_GOTATAB ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает это уведомление своему порождающе- му окну, когда пользователь нажимает клавишу Tab, а фокус нахо- дится на командной кнопке. После этого порождающее окно может вмешаться в обработку нажатия клавиши, возвращая ненулевое значе- ние. BBN_GOTABTAB ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Командная кнопка посылает это уведомление своему порождающе- му окну, когда пользователь нажимает клавишу клавиши Shift-Tab (обратная табуляция), а фокус находится на командной кнопке. Пос- ле этого порождающее окно может вмешаться в обработку нажатия клавиши, возвращая ненулевое значение. Сообщение WM_DRAWITEM ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Если вы задали для командной кнопки стиль BBS_OWNERDRAW, она посылает своему порождающему окну сообщение WM_DRAWITEM, Параметр lParam этого сообщения содержит указатель far на структуру DRAWITEMSTRUCT. Поля данной структуры описываются в документации SDK Windows по данному сообщению, но здесь внесены следующие усовершенствова- ния: Для автоматических кнопок с независимой фиксацией поле itemID структуры DRAWITEMSTRUCT содержит значение BS_AUTOCHECKBOX. В противном случае оно содержит значение BS_CHECKBOX. Другими полями и передаваемыми в них значениями являются: CtlType ODT_BUTTON CtlID Идентификатор управляющего элемента для кнопки (GetWindowWord(hWnd, GWW_ID)). itemAction ODA_DRAWENTIRE, пока не изменение фокуса не приведет к переотображению. В этом случае поле содержит ODA_FOCUS. itemState Комбинация следующих значений, в зависимости текущего состояния командной кнопки: ODS_FOCUS если с помощью клавиатуры на кнопку перемещен фокус. ODS_DISABLED если кнопка запрещена. ODS_SELECTED если командная кнопка подсвече- на. hwndItem Описатель окна управляющего элемента. hDC Контекст устройства для окна. Все значения в состоянии по умолчанию возвращаются GetDC. rcItem Прямоугольная область клиента для управляющего элемента. Управляющий элемент BORSHADE ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Функция: панели и разделители. Имя класса: "borshade" (SHADE_CLASS) Стили окна ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Типы, наследуемые из стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Отсутствуют. Типы, уникальные для BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД BSS_GROUP ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Этот стиль рисует "рельефный" серый блок. BSS_HDIP ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данный стиль рисует горизонтальную разделительную линию, ко- торая может использоваться для разделения частей диалогового окна. BSS_VDIP ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данный стиль рисует вертикальную разделительную линию, кото- рая может использоваться для разделения частей диалогового окна. BSS_HBUMP ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данный стиль рисует горизонтальную разделительную линию, ко- торая может использоваться для разделения частей серой тени груп- пы (BSS_GROUP). BSS_VBUMP ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данный стиль рисует вертикальную разделительную линию, кото- рая может использоваться для разделения частей серой тени группы (BSS_GROUP). Сообщения ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Отсутствуют. Диалоговый класс BORDLG ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Функция: быстрый вывод диалогового блока ("турбо" вывод). Имя класса: "bordlg" (BORDLGCLASS) Устраняя ненужные статические управляющие окна, поддерживая в диалоговом окне свой собственный частный список управляющих элементов и отображая сами элементы, данный специализированный класс диалогового окна реализует "турбо отображение" специализи- рованных управляющих элементов Borland. Он также автоматически обеспечивает трафаретный фон VGA и вывод с высоким разрешением. Если вы хотите, чтобы ваши диалоги имели "представление Borland", то этот диалоговый класс нужно задать в трафарете диалогового блока. Стили окна ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Типы, наследуемые из стандартных управляющих элементов Windows ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Все допустимые типы стандартного диалогового окна Windows. Типы, уникальные для BWCC ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Отсутствуют. Использование управляющих элементов BWCC в недиалоговых окнах ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Если вы хотите, чтобы недиалоговые окна выглядели как окна BorDlg (с серо-стальным фоном и светло-серым фоном для статичес- ких управляющих элементов), BWCC.DLL предоставляет две функции, которые заменяют стандартную оконные функции Windows "Def" и должны вызываться вместо них: - для дочерних окон MDI вместо стандартной функции Windows DefMDIChildProc вызывайте BWCCDefMDIChildProc. - Для всех других окон вместо стандартной функции Windows DefWindowProc вызывайте BWCCDefWindowProc. Как мы описали ранее для BWCCDefDlgProc, ваша оконная проце- дура для следующих сообщений: - WM_CTLCOLOR - WM_NCCREATE - WM_CREATE - WM_NCDESTROY - WM_SETFONT - WM_PAINT - WM_ERASEBKGND должна вызывать BWCCDefMDIChildProc или BWCCDefWindowProc. Примечание: Для DefFrameProc BWCC не предусматривают функциональной замены. Прочие функции ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД BWCC.DLL экспортирует три дополнительные функции, которые могут оказаться для ваc полезными. Функция BWCCGetVersion ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данная не требующая параметров функция возвращает текущую версию BWCC.DLL. Возвращаемое значение определяется в BWCC.H как BWCCVERSION. Функция BWCCGetPattern ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данная не требующая параметров функция возвращает описатель для кисти, используемой для закраски фона диалогов класса BorDlg. Поскольку эта кисть не может быть трафаретной кистью, перед выбо- ром ее в контексте устройства вы можете выровнять ее с помощью вызова UnrealizeObject и SetBrushOrg. Не удаляйте эту кисть вызо- вом DeleteObject! Функция BWCCMessageBox ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Данная функция, совместимая по вызову со стандартной функци- ей Windows MessageBox, выводит диалоговое окно, согласующееся со стилем диалогового типа Borland. |