Назад | Начало урока | Вперед
Содержание

Глава 3


19:06 11.01.2006

--------------------------------------------------

d:\MyC++Projects\MyC++Project05\Project051\Kross15

Программа Kross15

Эта программа готова!

Прочитай внимательно нижеописанное описание проекта!

Эта программа создала все исходные файлы
для программы Dety кроме:

В директории Debug :
Kross03.pdb
Kross03.pch
Kross03.ico
В основной директории:
StartN.bmp - картинка которая будет отображена во всех окнах
данного проекта при запуске готовой программы на исполнение.
Эти файлы обязательно надо копировать из проекта в проект
вручную(возможно,что файлы Kross03.pdb и Kross03.pch
можно скопировать автоматически - проверь это
в следующей версии программы!

Программа Kross15 создает код для программы Dety10
Програмима Dety10 будучи откомпилированной создаст
на экране столько окон,сколько нам необходимо.

Dety10 - программа успешно откомпилировалась,получен экзешник
Программа создает 6 окон,но зато все исходные файлы
были получены автоматическим путем!!!
Программа эта не хотела компилироваться пока я из предыдущей
программы(Dety09) не скопировал в директорию Debug данной
программы два файла - Kross03.pdb и Kross03.pch !!!
Как только скопировал эти две файла,сразу все прошло великолепно.
Эти два файла важны!!

-------------------------------------------------------------
Значит должны быть сохранены из проекта в проект следующие
файлы

В директории Debug :
Kross03.pdb
Kross03.pch
Kross03.ico
В основной директории:
StartN.bmp - картинка которая будет отображена во всех окнах
данного проекта при запуске готовой программы на исполнение.

----------------------------------------------------------

Программа Dety10 может создать столько окон на экране
сколько вы укажете интерактивно.Но надо еще подредактировать
программу Rross15 так,чтобы все допустим 42 окна или более
поместились на экране не накладываясь друг на друга.
Размещение дочерних окон на экране делается в функции OnInitDialog
файла Kross03Dlg.cpp Надо отредактровать этот файл
А поскольку у нас и этот файл создается автоматически,
то отредактировать надо файл находящийся в директории
Map_Of_Files

//////////////////////////////////////////////////////////////

Отредактировал:

Размещение дочерних окон на экране делается в функции OnInitDialog
файла Kross03Dlg.cpp Надо отредактровать этот файл
А поскольку у нас и этот файл создается автоматически,
то отредактировать надо файл находящийся в директории
Map_Of_Files

Размещение главного родительского окна в файла Kross03Dlg.rc
в рубрике Dialog относящейся к главному окну приложения.

Если отредактировать положение главного окна вне интеграц.
среды,то есть просто в текстовом редакторе и попробовать
запустить программу на компиляцию,то программе не
откомпилируется а сообщит что невозможно открыть проект.
То есть изменения в файле Kross03Dlg.rc были замечены
компилятором!И он не пропустил этот проект.

/////////////////////////////////////////////////////////////
/////////
//////// ВНИМАНИЕ!
////////
/////////////////////////////////////////////////

Краткое описание того как работает программа Kross15
и что она делает.

Эта программа создает исходный коды для программы Dety.
Откомпилированная программа Dety (ее экзешник и исходные
коды,которые создала программа Kross15)находится
в той же директории,что и Kross15(смотри).

Программа Kross15 "создает" исходные коды для программы Dety
следующим образом:фактически она компилирует(собирает)
результирующий код из нескольких взаранее подготовленных
файлов.Эти взаранее подготовленные файлы находятся
в двух директориях :
d:\MyC++Projects\MyC++Project05\From1
d:\MyC++Projects\MyC++Project05\Map_of_Files

Из директории From1 программа копирует исходные файлы
без изменений.Из директории From в директорию программы Dety.

В директории же Map_of_Files находятся исходные файлы
для программы Dety,которые так же необходимо скопировать,
но скопировать так,чтобы чтобы во время копирования
отдельные фрагменты (текст) этого файла изменялись
То есть это изменяемые файлы.Которые из программы
в программу должны частично изменяться.

Рассмотрим на примере файла MapKross03.rc
смотри директорию
d:\MyC++Projects\MyC++Project05\Map_of_Files\Map_Kross03_rc

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

block01.h - неизменяемый
block02.h - неизменяемый
block03.h - изменяемый
block04.h - неизменяемый
block05.h - изменяемый
block06.h - неизменяемый

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

Если мы посмотрим текст третьего блока -block03.h-
то мы увмдим что он весь состоит из большого числа
однотипных (но не полностью одинаковых) 4-строчных блоков.
Сколько блоков из этого файла надо скопировать в исходный
файл для программы Dety?

Это определяется тем,сколько окон мы ходим иметь в программе
Dety.Допустим если мы ходтим иметь 5 окон,то интерактивно
указываем что будем делать 5 окон и программа Kross15
скопирует из этого блока в результирующий файл 5 блоков
из block03.h

То же произойдет с файлом block05.h Так как он изменяемый,
то из него тоже будет скопировано только пять блоков(хотя
текст самих блоков в этом файле естественно уже иной)

Технология копирования этих блоков такова,что для
копирования блоков из файла block03.h пришлось
написать отдельную функцию copy02.cpp,а для
копирования блоков из файла block05.h
пришлось написать отдельную функцию copy05.cpp.
(потому что нет универсальной функции для этого)

В результате такой работы в результирующем файле по
имени MapKross03.rc в проекте Dety мы получим нужный
нам исходный текст.

Подобная работа произойдет со всеми файлами в директории
d:\MyC++Projects\MyC++Project05\Map_of_Files

В результате мы получим все исходные файлы для компиляции
программы Dety.Кроме трех файлов указанный в статье выше.
-------------------------------

Естественно что все исходные файлы в директории
d:\MyC++Projects\MyC++Project05\Map_of_Files
должны были нами взаранее подготовлены,чтобы программа Kross15
могла черпать из них данные для своей работы.

Подготовка файлов из этой директории занимает очень много
времени и сопряжена с ошибками.Чтобы облегчить подготовку
этих файлов,я решил эту задачу автоматизировать.
И эту работу поручить делать другой программе.
Для этого открыли новый проект :

d:\MyC++Projects\MyC++Project05\Project052

То есть это будет программа ,которая составляет исходные
файлы для программы Kross15,которая в свою очередь
составляет исходные файлы для программы Dety!.
А что,неплохо придумано!

//////////////////////////////////////////////////////////////
//////////// //////////////////////
/////////// ПРОЕКТ Project052 ///////////////////////
//////////// /////////////////////
////////////////////////////////////////////////////////////

0:59 17.01.2006

И так новый проект:

d:\MyC++Projects\MyC++Project05\Project052

Что он делает?

Эта программа делает несколько файлов,с которыми будет
работать программа Kross15:

d:\MyC++Projects\MyC++Project05\Project051\Kross15

В новом проекте программа должна создать все изменяемые
файлы для директории

d:\MyC++Projects\MyC++Project05\Map_of_Files

для программы Kross15.

Помним что именно из этой директории программа Kross15
предыдущего проекта берет данные,перерабатывает их
и создает новый исходный код для программы Dety.

Созданный в результате работы новой программы код
гораздо легче проконтролировать на его правильность.
Например в этой программе мы указываем сколько
окон хотим иметь в программе Dety.Указываем число окон
-3.И проверяем код созданный новой прогармммой для
трех окон.Если он такой как надо,то и код для 55
окон тоже будет правильный потому-что программа
работает по одному алгоритму.

Еще надо обратить внимание что новый проект должен
воссоздавать точно такую же конфигурацию текстовых
файлов,какая была у программы Kross15.(имеется
в виду перенос сторок,пробелы и тд.,в противном
случае программа Kross15 в своей работе неправильно
обработает и скопирует эти файлы в директорию Dety.
Потому что в программе Kross15 для многих файлов
созданы свои индивидуальные функции позволяющие
в точности скопировать именно блоки данного файла.

И так первая программа из этого нового проекта:

--------------------------------------
Программа Kross16

d:\MyC++Projects\MyC++Project05\Project052\Kross16

Эта программа создает следующие текстовые файлы
для для программы Kross15:

d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_Kross03_rc\\block03.cpp
d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_Kross03_rc\\block03.h

Эти файлы программа Kross15 будет использовать как исходные
в своей работе.

Указываем интерактивно любое количество окон,и получим в этих
двух указанных файлах,код для всех новых окон!
Запусти экзешник и посмотри результат в указанных файлах.

////////////////// !!!!!!!!!!!!!!! //////////

Не забудь немедленно удалить эти вновь созданные два файла,
потому что не сделав этого,и запустив нечаянно экзешник
еще раз,ты получишь в этих файлах двойное повтороение
текстов,так как программа при каждом новом запуске все время
добавляет в эти файлы текст,не стирая предыдущего!.

Заголовочных файлов здесь даже гораздо больше чем надо.
Наверное надо бы удалить лишние?

--------------------------------------
Программа Kross17

Эта программа создает следующие текстовые файлы
для для программы Kross15:

d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_Kross03_vcproj\\block02.h
d:\\MyC++Projects\\MyC++Project05\\Map_of_Files\\Map_Kross03_vcproj\\block04.h

Эти файлы программа Kross15 будет использовать как исходные
в своей работе.

--------------------------------

Все эти проекты завтра еще раз проверь,откомпилируй и проверь
что создает экзешник попробуй убрать лишние заголовочные файлы.


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz