Без окон, без дверей...
Следующий способ уменьшить размер программы
заключается в ответе на вопрос: "Из-за чего программа, созданная в
Visual C++, получается большой?" Ответ очень прост, C++ является
объектным языком. В нем каждый элемент представляет собой объект,
который обладает своими свойствами, методами и событиями. Любой объект
вполне автономен и многое умеет делать без ваших указаний. Это значит,
что вам нужно только подключить его к своей форме, изменить нужным
образом свойства, и приложение готово! И оно будет работать без
какого-либо прописывания его деятельности.
Но в объектном программировании есть и свои
недостатки. В объектах реализовано большое количество действий,
которые вы и пользователь сможете производить с ним. Но реально в любой
программе мы используем два-три из всех этих свойств. Все остальное
— для программы лишний груз, который никому не нужен.
Но как же тогда создать компактный
код, чтобы программа занимала минимум места на винчестере и в
оперативной памяти? Тут есть несколько вариантов.
- Не использовать библиотеку MFC (для любителей
Borland Delphi это библиотека VCL ), которая упрощает программирование.
В этом случае придется весь код набирать вручную и работать только с
WinAPI ( Win dows Application Programming Interface , прикладной
программный интерфейс). Программа получается очень маленькой и
быстрой. Результирующий код будет меньше, чем при использовании
MFC в сочетании с самым большим сжатием. Но таким образом вы лишаетесь
простоты визуального программирования и можете ощутить все неудобства
программирования с помощью чистого WinAPI.
Для большей оптимизации размера файла можно использовать Assembler , но
он слишком сложен, да и писать программу на нем намного дольше, чем
даже на чистом С. Именно поэтому данная тема не рассматривается в этой
книге.
- Сжимать готовые программы с помощью компрессоров.
Объектный код сжимается в несколько раз, и программа, созданная с
использованием MFC , может превратиться из монстра в 300 Кбайт в
скромного по размерам "зверя", занимающего на диске всего
30—50 Кбайт. Главное преимущество состоит в том, что вы не
лишаетесь возможностей объектного программирования и можете спокойно
забыть про неудобства WinAPI.
Второй метод мы уже обсудили (см. разд. 1.1), поэтому остается только описать первый вариант.
Если вы хотите создать действительно
компактную программу, то необходимо забыть про все удобства. Вы не
сможете подключать визуальные формы или другие удобные модули,
написанные фирмой Microsoft для упрощения жизни программиста.
Нельзя использовать классы или компоненты ActiveX. Только функции API
самой Windows и ничего больше.
Теперь переходим к практическим занятиям. Запустите Visual C++ и создайте новый проект. Для этого нужно выбрать команду меню File / New / Project
(Файл/Новый/Проект). Перед вами откроется окно создания нового проекта
(рис. 1.5). Слева расположено дерево типов проектов. Нас интересует
C++, поэтому выберите пункт Visual C++ Projects . Этот пункт мы будем выбирать при написании абсолютно всех примеров из данной книги. С правой стороны в списке Templates (Шаблоны) появятся иконки для создания различных проектов на основе мастеров. Выберете пункт MFC Application (Приложение MFC).
Внизу окна расположены две строки
ввода. В первой вы должны указать имя создаваемого проекта. Оно будет
использоваться в качестве имени запускаемого файла и имени файла,
который вы будете в дальнейшем открывать для редактирования.
Давайте здесь укажем TestMFC.
Рис. Окно Мастера создания нового проекта
В строке Location
(Расположение) нужно указать путь к папке, в которой среда разработки
создаст необходимые проекту файлы. Я рекомендую завести свою папку
с именем, например, My C++ Projects , в которой
будут размещаться все проекты. Выберете эту папку и нажмите ОК. По
окончании работы мастера у вас в папке My C++ Projects появится еще
одна папка с именем TestMFC , в которой и будут находиться все файлы
данного проекта.
Как только вы нажали O К в окне
создания нового проекта (см. рис. 1.5), перед вами откроется окно
Мастера создания нового MFC -приложения (рис. 1.6).
Вы можете сразу нажать кнопку Finish,
чтобы завершить его работу с параметрами по умолчанию, или
предварительно указать свои настройки. Наша задача — создать
маленькое приложение, поэтому на данном этапе постараемся
оптимизировать то, что может создать для нас мастер.
С левой стороны окна расположены
разделы. Выделяя их, вы можете настраивать соответствующие параметры.
Давайте просмотрим все разделы и установим необходимые значения, а
заодно познакомимся с теми параметрами, которые будут
использоваться для создания приложений при рассмотрении
последующих примеров:
Во всех остальных разделах оставляем
значения по умолчанию, потому что мы не будем использовать базы данных
или документы. В большинстве случаев нам будет достаточно окна и
меню. А первое время постараемся обходиться вообще без MFC .
Нажмите кнопку Finish , чтобы
завершить работу мастера. По завершении его работы вы увидите главное
окно среды разработки Microsoft Visual C++, представленное на рис. 1.7.
Это окно мы будем использовать достаточно часто, поэтому в процессе
работы уточним все детали.
Рис. 1.7. Главное окно среды разработки Microsoft Visual C++
Сейчас нас интересуют параметры
проекта. Мы должны отключить все, что нам будет мешать. При сборке
проекта в Visual C++ по умолчанию могут использоваться два вида
настроек: debug и release . Первый необходим на этапе разработки, и в
этом режиме Visual C++ создает запускаемый файл, который содержит
слишком много дополнительной информации. Она будет необходима вам в
среде разработки в дальнейшем при отладке программы и поиске ошибок. Во
втором режиме эта информация отключается, и запускаемый файл будет
меньшего размера.
В верхней части окна на панели с кнопками найдите выпадающий список, в котором написано Debug . Измените это значение на Release .
Среда разработки Visual C++ может
создавать запускаемые файлы, использующие MFC -библиотеки, двух
типов: статические и динамические. По умолчанию используется
динамическая сборка. В таком режиме запускаемый файл получается
меньшего размера, но он не будет работать без динамических
библиотек, таких как mfcXXX.dll, где XXX — это номер версии среды
разработки.
В этом случае, чтобы кто-то смог
запустить наш проект, мы должны отослать ему не только запускаемый
файл, но и библиотеки! Это неудобно и неприлично. Лучше использовать
статическую компиляцию, при которой результирующий файл будет намного
больше, зато все будет содержать внутри себя. При таком подходе не
потребуются дополнительные библиотеки.
Чтобы изменить тип использования MFC , в окне Solution Explorer сначала выберите имя вашего проекта, а затем меню команду Project/Properties. На рис. 1.8 представлено окно свойств проекта.
Рис. Окно свойств проекта
Слева в окне расположены разделы свойств. Нас будет интересовать раздел General (Основные). Выделите его, и в основном окне появится список соответствующих свойств. Найдите свойство Use of MFC и измените его значение на Use of MFC in a Static Library. Нажмите кнопку OK , чтобы закрыть окно и сохранить изменения.
Теперь соберем наш проект в готовый исполняемый файл. Для этого нужно выбрать команду меню Build/Build solution (Построить/Построить проект). Внизу главного окна (см. рис. 1.7), в панели Output (Вывод) будет появляться информация о ходе сборки. Дождитесь, пока не появится сообщение типа:
---------------------- Done ----------------------
Build : 1 succeeded , 0 failed , 0 skipped
Теперь
перейдите в папку, которую вы выделили под хранение проектов, и найдите
там папку TestMFC . В ней расположены файлы с исходным кодом
нашего проекта, сгенерированные мастером. Тут же должна быть папка
Release , в которой среда разработки создала во время компиляции
промежуточные и исполняемый файлы. Выделите файл TestMFC . exe и
посмотрите его свойства (надо щелкнуть правой кнопкой мыши и
выбрать в появившемся меню пункт Свойства). Размер нашего пустого проекта составляет 386 Кбайт. Это очень много.
Попробуйте
открыть его в программе ASPack и сжать. У меня сжатый исполняемый
файл составил 187 Кбайт. Сжатие составило практически 50%, и это уже
более или менее приемлемый размер для шуточной программы.