Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Borland C++ 3.0

           Глава 13. Создание ресурсов, определенных пользователем
       -----------------------------------------------------------------

            Кроме типов ресурсов,  описанных в предыдущих главах, вы мо-
       жете также  определить  свои собственные ресурсы.  После создания
       нового типа ресурса вы можете добавить к своему  проекту  опреде-
       ленные пользователем ресурсы, также как добавляются ресурсы любо-
       го стандартного предопределенного типа (диалоговые окна,  меню  и
       битовые массивы).

            Зачем нужно определять ваши собственные типы ресурсов? Опре-
       деленные пользователем ресурсы могут содержать данные,  не  соот-
       ветствующие ни  одному из предопределенных типов ресурсов (ресур-
       сов диалоговых окон,  меню, акселераторов и т.д.). Например, имея
       ресурс  символьной  строки,  превышающий  ограничение STRINGTABLE
       (255 символов), вы можете определить свой собственный тип и запи-
       сать там ваши символьные строки.

            В качестве  определенных  пользователем  ресурсов  вы можете
       также  включить в проект метафайлы.  Метафайл - это тип  битового
       массива (в  исходной форме это набор вызовов интерфейса графичес-
       кого устройства (GDI)), который не только более легко масштабиру-
       емый и  более  независимый  от устройства графический ресурс,  но
       также занимает в памяти меньше памяти, чем ресурс битового масси-
       ва.

                  Примечание: Более подробно о метафайлах рассказывается
             в книге Чарльза Петцольда "Программирование в Windows" (см.
             библиографию в начале книги).

            При определении нового ресурса вы можете записать данные ли-
       бо как часть определения ресурса в файле проекта,  либо  как  от-
       дельный файл. Как и в случае любого другого ресурса, Пакет разра-
       ботчика ресурсов может компилировать данные  и  встраивать  их  в
       выполняемый  файл,  чтобы данные были доступны для вашей приклад-
       ной программы во время выполнения.

            Для добавления к прикладной программе вы  можете  также  ис-
       пользовать тип ресурса RCDATA. Подробности см. ниже.

            При работе с ресурсами,  определенными пользователем, выпол-
       няются пять основных задач:

            - создание типа ресурса, определенного пользователем;
            - добавление  определенного пользователем ресурса к типу ре-
              сурса;
            - редактирование ресурса, определенного пользователем;
            - проверка ресурса, определенного пользователем;
            - сохранение ресурса, определенного пользователем.
                Создание ресурса, определенного пользователем
       -----------------------------------------------------------------

            Перед тем, как добавить к файлу проекта определенный пользо-
       вателем ресурс, нужно сначала создать для него тип:

            1. Убедитесь,  что вы уже открыли файл проекта (см. Главу 3,
               если вы хотите узнать об этом подробнее).

            2. Выберите команду Resource¦New (Ресурс¦Новый).

            3. В диалоговом окне New  Resource  (Новый  ресурс)  нажмите
               кнопку New Type (Новый тип).

            4. В  диалоговом  окне  New Resource (Новый ресурс) наберите
               имя типа создаваемого ресурса. Например, если вы создаете
               ресурс,  содержащий  большой блок текста,  то тип ресурса
               можно назвать TEXT.

            5. При запросе, хотите ли вы создать идентификатор для ново-
               го типа ресурса,  ответьте Yes (Да), затем введите значе-
               ние идентификатора в диалоговом окне New Identifier  (Но-
               вый идентификатор).

                  Примечание: Если  вы  используете числовой идентифика-
             тор,  он должен превышать значение 255, так как Windows ре-
             зервирует значения 1 - 255 для стандартных ресурсов.

            После того как вы определите новый тип ресурса,  то при соз-
       дании нового ресурса увидите, что данный ресурс перечислен в диа-
       логовом  окне New Resource (Новый ресурс) среди типов стандартных
       ресурсов (ACCELERATOR - акселератор,  BITMAP  -  битовый  массив,
       USER_DEFINED  RESOURCE  - ресурс, определенный пользователем,  и
       т.д).
               Добавление ресурса, определенного пользователем
       -----------------------------------------------------------------

            После создания типа ресурса вы можете добавить ресурс данно-
       го типа к проекту:

            1. Убедитесь, что вы уже открыли проект. (Об открытии проек-
               та рассказывается в Главе 3.)

            2. Выберите команду Resource¦New (Ресурс¦Новый).  Пакет раз-
               работчика  ресурсов выводит диалоговое окно New Resource,
               где параметр Resource (Ресурс) уже выбран.  Для  создания
               нового ресурса активизируйте кнопку OK.

           3. В диалоговом окне New Resource (Новый ресурс) выберите ваш
              определенный пользователем ресурс. В блоке "Place resource
              in" выберите файл проекта (возможно текущий), в который вы
              хотите записать ресурс.

                 Примечание: Если вы не видите нужный тип  ресурса,  ис-
              пользуйте  кнопку New Type (Новый тип) для определения но-
              вого ресурса.

       ----T-----------------------------------------------------------¬
       ¦ - ¦                     New Resource                          ¦
       +---+-------------------------------------------T---------------+
       ¦   Resource type                               ¦               ¦
       ¦   ------------------------------------------¬ ¦ ------------¬ ¦
       ¦   ¦ DIALOG                                  ¦ ¦ ¦  _        ¦-¦
       ¦   ¦ -------------------------------T-¬      ¦ ¦ ¦ V    OK   ¦-¦
       ¦   ¦ ¦ ACCELERATORS                 ¦^¦      ¦ ¦ L-------------¦
       ¦   ¦ ¦------------------------------+-+      ¦ ¦   ------------¦
       ¦   ¦ ¦¦TWO--------------------------¦-¦      ¦ ¦               ¦
       ¦   ¦ ¦L-----------------------------+-¦      ¦ ¦               ¦
       ¦   ¦ ¦ CURSOR                       ¦-¦      ¦ ¦               ¦
       ¦   ¦ ¦ DIALOG                       ¦-¦      ¦ ¦ ------------¬ ¦
       ¦   ¦ ¦ FONT                         +-+      ¦ ¦ ¦           ¦-¦
       ¦   ¦ ¦                              ¦v¦      ¦ ¦ ¦ X  Cancel ¦-¦
       ¦   ¦ L------------------------------+--      ¦ ¦ L-------------¦
       ¦   L------------------------------------------ ¦   ------------¦
       ¦                                               ¦               ¦
       ¦   Place resource in                           ¦               ¦
       ¦   ------------------------------------------¬ ¦               ¦
       ¦   ¦                                         ¦ ¦ ------------¬ ¦
       ¦   ¦  -----------------------------------T-¬ ¦ ¦ ¦..  New    ¦-¦
       ¦   ¦  ¦ rwpdemo.rc                       ¦v¦ ¦ ¦ ¦... Type   ¦-¦
       ¦   ¦  L----------------------------------+-- ¦ ¦ L-------------¦
       ¦   ¦                                         ¦ ¦   ------------¦
       ¦   L------------------------------------------ ¦               ¦
       ¦                                               ¦               ¦
       ¦                                               ¦               ¦
       ¦                                               ¦ ------------¬ ¦
       ¦                                               ¦ ¦           ¦-¦
       ¦                                               ¦ ¦ ?  Help   ¦-¦
       ¦                                               ¦ L-------------¦
       ¦                                               ¦   ------------¦
       ¦                                               ¦               ¦
       L-----------------------------------------------+----------------

            Рис. 3.13 Диалоговое окно New Resource

            New Resource - новый ресурс;  Place resopurce in - поместить
       ресурс в...;  Resource type - тип ресурса; OK - выполнить; Cancel
       - отмена; New type - новый тип; Help - справка

            4. После  того,  как  вы  выберите  в  диалоговом  окне  New
               Resource (Новый ресурс) кнопку OK, Пакет разработчика ре-
               сурсов открывает текстовый редактор с пустым определением
               ресурса,  определенного пользователем.  Например, если вы
               добавите определенный пользователем ресурс с именем TEXT,
               то увидите в текстовом редакторе следующий текст:

                TEXT_1 TEXT
                BEGIN

                END

            Здесь вы можете редактировать ресурс, как описывается в сле-
       дующем разделе.


             Редактирование определенного пользователем ресурса
       -----------------------------------------------------------------

            Для редактирования  ресурса,  определенного   пользователем,
       нужно открыть  проект.  Вы  можете либо создать новый ресурс (см.
       предыдущий раздел), либо открыть в окне проекта уже существующий.

            Имя ресурса указывается в окне проекта (по типу ресурса, оп-
       ределенного пользователем),  как  любой другой ресурс предопреде-
       ленного типа.  Например,  если вы создадите тип  ресурса  TEXT  и
       ресурс TEXT, то увидите в окне проекта запись ресурса TEXT.

            Чтобы открыть редактор, сделайте следующее:

            - дважды  щелкните кнопкой "мыши" на имени ресурса,  который
              вы хотите редактировать;

            - выделите имя ресурса, затем выберите команду Resource¦Edit
              (Ресурс¦Редактирование) или Resource¦Exit As Text (Ресурс¦
              Редактирование в виде текста).

            Когда ресурс выведется в текстовом редакторе,  вы можете до-
       бавить к нему данные или редактировать их.  Приведем пример того,
       что вы увидите при  добавлении  к  проекту  нового  определенного
       пользователем ресурса типа RESTYPE:

            RESTYPE_1 RESTYPE
            BEGIN
               [определения_данных]
            END

            Первая строка показывает название и тип ресурса.  Пакет раз-
       работчика ресурсов  по  умолчанию  строит для нового ресурса имя,
       присоединяя к типу ресурса подчеркивание и целое значение. Напри-
       мер, первый ресурс RESTYPE, который вы добавляете к проекту, ста-
       новится ресурсом RESTYPE_1, второй - ресурсом RESTYPE_2 и т.д.

            Чтобы добавить к ресурсу данные, можете сделать следующее:

            - Используйте текстовый  редактор  для  ввода  данных  между
              BEGIN и END.

            - Запишите  данные  в  отдельный файл и добавьте имя файла к
              концу первой строки записи ресурса.

            После внесения изменений (добавления данных  между  BEGIN  и
       END или  ввода имени файла не первой строке) для сохранения изме-
       нений нужно перекомпилировать ресурс.  Если вы выйдите без  пере-
       компиляции, то потеряете все изменения.
                        Ввод данных в записи ресурса
       -----------------------------------------------------------------

            При использовании текстового  редактора  клавиши  Tab,  Del,
       End, PgUp, PgDn и Backspace работают как обычно. Однако при рабо-
       те в редакторе не следует увлекаться  форматированием,  поскольку
       Пакет разработчика  ресурсов вероятно переструктурирует текст при
       компиляции или декомпиляции ресурсов.

                  Примечание: Описание работы внутреннего текстового ре-
             дактора см. в начале данного руководства.

            Приведем некоторые рекомендации для задания данных между па-
       раметрами BEGIN и END:

            - Данные могут включать в себя любое сочетание числовых зна-
              чений и строк.

            - Для  представления  числовых  значений  можно использовать
              восьмеричную, шестнадцатиричную или десятичную запись.

                 * В качестве символов, предшествующих шестнадцатиричной
                   записи, используйте  символы 0х или $.  Данное предс-
                   тавление поддерживает только 16-битовые значения. Ес-
                   ли вы хотите задать нечетные шестнадцатиричные значе-
                   ния,  используйте   шестнадцатиричную   строку   (см.
                   далее).

                * В качестве символом, предшествующих восьмеричной запи-
                  си, используйте 0o или просто 0.

            - Шестнадцатиричные значения можно также представлять  шест-
              надцатиричные  значения с помощью шестнадцатиричной строки
              - строки шестнадцатиричных значений, заключенной в одиноч-
              ные кавычки. Компилятор игнорирует все пробелы, включенные
              в нее для лучшей читаемости шестнадцатиричных кодов.

              Например, вы можете представлять значения ASCII символов в
              слове string,  как '73 74 72 69 6T 67' и шестнадцатиричное
              число 06EA в виде '006EA'.

            - Если вы включите в ресурс текстовые строки,  то их следует
              заключать в двойные кавычки, например, "string".

              Строки не будут автоматически завершаться нулем. Чтобы за-
              вершить  строку  нулевым символом, наберите в конце строки
              \0 (обратная косая черта и 0).

            Например, ваша  запись  ресурса с добавленными данными может
       выглядеть следующим образом:

            RESTYPE_1 RESTYPE
            BEGIN
               "Это строка"
               0xFFAA 0o7076 01077
               '54 68 69 73 20 69 73 0D 0A 73 6F 6D 65 20 73 61'
               '6D 70 6C 65 0D 64 61 74 61 2E'
            END



               Обработка данных, записанных в отдельном файле
       -----------------------------------------------------------------

            Если данные записываются в отдельный файл,  для редактирова-
       ния файла нужно использовать внешний редактор.  Чтобы добавить  в
       запись ресурса ссылку на файл данных, сделайте следующее:

            - После имени типа ресурса наберите полное имя маршрута фай-
              ла;

            - Удалите операторы BEGIN и END.

            Следующая  запись ресурса для ресурса  RESTYPE_1  указывает,
       что данные записываются в файле C:\RW\MYDATE.TXT:

            RESTYPE_1 RESTYPE c:\rw\mydata.txt

                Проверка ресурса, определенного пользователем
       -----------------------------------------------------------------

            Поскольку вы создаете специфический для данной программы ре-
       сурс,  определенный  пользователем, проверить его в Пакете разра-
       ботчика ресурсов нельзя. Чтобы проверить определенный пользовате-
       лем  ресурс,  используйте   Пакет   разработчика   ресурсов   для
       компиляции файла проекта, содержащего ресурс, и встраивание его в
       вашу программу.  Затем вы можете запустить программу и  использо-
       вать в ней ресурс.

            О компиляции ресурсов и связывании их с программой рассказы-
       вается в Главе 3.



                      Использование типа ресурса RCDATA
       -----------------------------------------------------------------

            Для добавления к прикладной программе данных ресурсов вы мо-
       жете использовать   предопределенный   тип   ресурса  RCDATA.  Он
       работает аналогично типу  ресурса,  определенного  пользователем.
       Основная разница здесь в возможности адресации: иногда желательно
       иметь много различных типов определенных  пользователем ресурсов,
       чем один тип RCDATA.

                  Примечание: Ресурс RCDATA включен в Пакет разработчика
             ресурсов в целях совместимости.

            Если вы используете ресурс RCDATA,  добавьте его  к  проекту
       путем выбора  команды  File¦New  (Файл¦Новый) и добавление нового
       ресурса с типом RCDATA.  Вы увидите в текстовом редакторе  пустое
       определения  RCDATA  и  можете  набрать  данные между параметрами
       BEGIN и END.  Используйте при наборе данных те же правила,  что и
       для ресурсов, определенных пользователем.

                Удаление ресурса, определенного пользователем
       -----------------------------------------------------------------

            Для удаления из окна проекта ресурса,  определенного пользо-
       вателем, с  помощью  "мыши"  или клавиш стрелок выделите запись в
       окне проекта. Затем удалите запись, сделав следующее:

            - Нажмите клавишу Del или выберите команду Edit¦Delete  (Ре-
              дактирование¦Удаление), чтобы  просто  удалить ресурс.

            - Для удаления ресурса из текущего проекта и помещения его в
              буфер вырезанного  изображения  Windows  выберите  команду
              Edit¦Cut (Редактирование¦Вырезание).  Это дает возможность
              вставить его в другой проект.
                     Приложение A. Технические замечания
       -----------------------------------------------------------------

                            Различия в компиляторе
       -----------------------------------------------------------------

            Компилятор  Пакета  разработчика  ресурсов  почти  полностью
       совместим с компилятором Microsoft,  и имеет существенные улучше-
       ния по сравнению с компилятором ресурсов фирмы Microsoft.

            Компилятор Пакета  разработчика  ресурсов отличают следующие
       средства и усовершенствования:

            - Компилятор Пакета разработчика ресурсов допускает  тексто-
              вые  описания графических ресурсов (курсоров,  пиктограмм,
              битовых массивов и т.д.).  Компилятор фирмы  Microsoft  не
              позволяет этого делать.  Текстовые описания записываются с
              помощью языка записи  ресурсов,  описанного  в  справочной
              системе Пакета разработчика ресурсов.

            - Компилятор  Пакета  разработчика ресурсов поддерживает для
              каждого числового поля числовые константы и  выражения,  а
              компилятор Microsoft - нет.  Например,  следующий оператор
              корректно интерпретируется Пакетом разработчика  ресурсов,
              но  приводит  к ошибке при использовании компилятора фирмы
              Microsoft:

                  20 + 20 - 20 ICON foo.ico

              Пакет разработчика ресурсов интерпретирует  данную  строку
              как определение ресурса ICON с идентификатором 20,  содер-
              жащемся в FOO.ICO. Компилятор Microsoft пытается интерпре-
              тировать данную строку,  как тип ресурса + с идентификато-
              ром 20, содержащемся в файле 20.

            - В Пакет разработчика ресурсов добавлен новый фундаменталь-
              ный тип данных - шестнадцатиричная строка. Этот тип данных
              содержит переменное число шестнадцатиричных цифр, описыва-
              ющих  байты данных,  заключенных в одиночные кавычки.  Для
              ясности вы также можете включать сюда пробелы - компилятор
              их игнорирует. Этот новый тип облегчает ввод пользователем
              шестнадцатиричных данных. Например, следующая шестнадцати-
              ричная  строка  представляет  5-байтовое шестнадцатиричное
              число.: '010A0B0c0E'. Вы можете также представить это чис-
              ло следующим образом: '01 0A 0B 0c 0'

            - Компилятор Пакета разработчика ресурсов поддерживает ссыл-
              ки на файлы в ресурсах RCDATA, а также в ресурсах, опреде-
              ленных пользователем.  Поддержка ссылок на файлы устраняет
              единственное различие между ресурсами, определенными поль-
              зователем, и ресурсами RCDATA. Если используется  для ком-
              пиляции ресурса RCDATA, содержащий  ссылку на файл, компи-
              лятор ресурсов фирмы Microsoft, то получите синтаксическую
              ошибку.

            В настоящее время Пакет разработчика ресурсов не поддержива-
       ет одно средство, связанное с препроцессором, которое обеспечива-
       ет компилятор фирмы Microsoft:  Пакет  разработчика  ресурсов  не
       поддерживает сложные   параметризованные   определения  #defines.
       Например, компилятор ресурсов фирмы Microsoft будет успешно  ком-
       пилировать следующий код:

            #define foo( a, b) 10, b, a

            RCDATA
               BEGIN
                 foo( 1, 3),
                 foo( 2, 4),
                 foo( 5, 6)
               END

          Диалоговые окна, как порожденные или перекрывающиеся окна
       -----------------------------------------------------------------

            Диалоговые окна  могут использоваться,  как порожденные окна
       или перекрывающиеся окна.  В Пакете разработчика ресурсов есть по
       крайней мере три диалоговых окна, являющихся порожденными: диало-
       говое окно редактора меню,  диалоговое окно редактора акселерато-
       ров и диалоговое окно идентификаторов.

            Пример диалогового окна,  использующегося как перекрывающее-
       ся, можно найти в  книге  Чарльза Петцольда  "Программирование  в
       Windows". В главе,  посвященной диалоговым окнам,  имеется пример
       Hexcalc, который создает такое диалоговое окно.

                  Примечание: См.  библиографию в начале  данного  руко-
             водства.


[ Назад ] [ Оглавление ]

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог