Чтение онлайн

на главную - закладки

Жанры

Программирование для карманных компьютеров

Волков Владимир

Шрифт:

«C: \Setup\cabwiz\CabWiz.exe» «C: \Setup\menu.inf» /err err.log

В этой строке указан полный путь к программе CabWiz.exe, путь к конфигурационному файлу menu.inf, и задан файл ошибок err.log.

4. Как следует из предыдущего пункта, для того, чтобы программа отработала как следует, необходимо создать для нее файл конфигурации menu.inf. Для этого нужно щелкнуть внутри папки Setup правой клавишей мыши, из контекстного меню выполнить команду Создать ? Новый текстовый документ. Созданный файл нужно назвать menu.inf и открыть его в Блокноте. Содержимое файла показано в листинге 4.37.

Листинг 4.37

[Version]

Signature = «$Windows NT$»

Provider = «MyBestCompany»

CESignature = «$Windows CE$»

[CEStrings]

AppName = «Menu Sample»

InstallDir = %CE1 %\Menu

[Strings]

reg_path = Software\MyBestCompany\Menu

[DefaultInstall]

Copyfiles = Files.Main, Files.Help

AddReg = RegSettings

CEShortcuts = Shortcuts

[SourceDisksNames]

1 =,"Menu files",C: \setup\

[SourceDisksFiles]

menu.exe = 1

bitmap2.bmp = 1

menu.ico = 1

ReadMe.txt = 1

[DestinationDirs]

Files.Main = 0, %InstallDir%

Files.Help = 0,

«My Documents»\Menu

Shortcuts = 0, %CE11 %

[Files.Main]

menu.exe,0x00000001

menu.ico,0x00000001

bitmap2.bmp,0x00000001

[Files.Help]

ReadMe.txt,0x00000001

[RegSettings]

HKLM,%reg_path%,0x00000000,alpha

HKLM,%reg_path%,test,0x00010001,3

[Shortcuts]

MenuApp,0,menu.exe, %CE11 %

5. После того как будет создан информационный файл, его нужно сохранить в каталоге Setup. Теперь можно запустить программу CabWiz.exe и создать установочный пакет. На самом деле запустить следует файл buildcab.bat. После завершения его работы в папке Setup будет найден файл menu.CAB. Этот файл можно скопировать на устройство и установить его там. Для этого достаточно дважды щелкнуть на файле. Это действие запустит программу установки WCELoad. После установки можно убедиться, что все файлы помещены в нужные каталоги и ярлык создан в указанной папке. Чтобы более подробно ознакомиться с возможностями системы поставки приложений для Pocket PC, в том числе с работой программы Application Manager и синтаксисом файла register.bat, стоит ознакомиться со сведениями, содержащимися в файле C: \Windows CE Tools\Htmlhelp\emtools\WCESETUP.CHM. Раздел Windows CE Directory Identifiers содержит информацию о значениях констант %CEx%, которые применяются в файлах конфигурации.

Глава 5 Разработка программ для Pocket PC с помощью Microsoft eMbedded Visual С++ 4.0

Поскольку все сказанное о среде VC 3.0 относится в полной мере и к eVC 4.0, да и сами среды похожи друг на друга как близнецы, нет нужды снова описывать среду разработки. Использовать eVC 4.0 необходимо, если требуется создавать приложения для Pocket PC 2003. Впрочем, изложенные в этой главе приемы и технологии, можно применять и для разработки приложения для Pocket PC 2002. Мы просто продолжим рассмотрение вопросов программирования в eVC, перейдя от основ к более продвинутым понятиям.

Объектно-ориентированное программирование

Абстракция, наследование, полиморфизм, инкапсуляция

Говоря об ООП (объектно-ориентированном программировании), нельзя обойти стороной эти четыре базовых понятия. Поэтому ниже будет приведено их краткое описание.

Абстракция – способность языка программирования моделировать свойства и поведение объектов реального мира. Поскольку речь идет о моделировании, то подразумевается, что свойства и поведение объекта воспроизводятся в весьма урезанном виде. То есть моделируются только те свойства и то поведение, которые имеют смысл для решения поставленной задачи. К примеру, если в терминах языка программирования описывается такой объект, как «клиент банка», то для того, чтобы этот объект был частью программного обеспечения автоматизированного рабочего места оператора банка, не нужно моделировать такое его свойство, как размер обуви. В создаваемом объекте это свойство будет отсутствовать. Но для моделирования объекта «покупатель обувного магазина» это свойство будет одним из основных. Абстракция обеспечивается наличием в языке программирования такого понятия как класс и наличием у класса полей (обеспечивающих описание свойств моделируемого объекта) и методов (обеспечивающих описание поведения моделируемого объекта).

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

Полиморфизм – это способность разных классов воспринимать и выполнять одну и ту же команду. Это обеспечивает возможность выполнения таких действий, как выдача этой команды не каждому объекту в отдельности, а всем сразу. В качестве

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

Инкапсуляция – свойство объекта скрывать внутри себя подробности своей реализации, делая доступной для внешнего мира только ту часть своей функциональности, которая нужна для обеспечения взаимодействия с другими объектами. В понятие инкапсуляции также входит обеспечение большей независимости создаваемого объекта.

Классы и объекты, поля и методы

Как уже было сказано ранее, основой ООП является такое понятие, как «класс». Класс можно представить как описание некоторой структуры, в состав которой входят данные и функции. Также эта структура должна подчиняться некоторым соглашениям, обеспечивающим выполнение требований ООП. Формальный синтаксис для описания класса приведен ниже.

<classkey> <classname> <:baselist>] { <member list> }

В качестве объявляющего классификатора <classkey> может использоваться ключевое слово class, struct или union. В качестве имени <classname> может использоваться любое уникальное имя внутри области видимости. В параметре <baselist> указывается список базовых классов, из которого наследуется текущий класс. Если класс не наследуется ни из одного из существующих классов, то список <baselist> может отсутствовать. В конструкции <member list> располагается список объявлений полей и методов класса.

Таким образом, внутри класса функции называются методами, а переменные – полями. При этом поля определяют свойства класса, а методы определяют поведение класса.

Каждое определение класса вводит новый тип данных. Даже если два класса имеют одинаковые списки членов, они все равно считаются разными типами, что иллюстрирует листинг 5.1.

Листинг 5.1

class First {

int memi;

double memd;

};

class Second {

int memi;

double memd;

};

class First obj1;

Second obj2 = obj1; // ошибка: obj1 и obj2 имеют разные типы

Тело класса определяет отдельную область видимости. Объявление членов внутри тела класса помещает их имена в область видимости класса. Наличие в двух разных классах членов с одинаковыми именами не является ошибкой, так как эти имена относятся к разным объектам.

После того как тип класса определен, на него можно ссылаться соответствующим образом. Для этого можно написать ключевое слово class, а после него указать имя класса. В предыдущем примере объект obj1 класса First объявлен именно таким образом. Помимо этого можно указать только имя класса. Так в приведенном примере объявлен объект obj2 класса Second.

Оба способа сослаться на тип класса эквивалентны. Первый заимствован из языка C и остается корректным методом задания типа класса, а второй способ введен в C++ для упрощения объявлений.

Задание переменной типа класса позволяет разработчикам осуществлять доступ к полям и методам объекта, используя для этого имя объектной переменной и оператор доступа – >.

Упражнение 5.1

1. Создать новый проект типа WCE Pocket PC 2003 Application. Его нужно сохранить с именем OOP1. На последней странице мастера нужно указать тип проекта Typical «Hello Word» application.

2. В окне Workspace открыть окно ресурсов и двойным щелчком на строке IDD_ABOUTBOX активировать в правой части экрана редактор диалогов.

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

Рис. 5.1. Отредактированная форма диалогового окна.

4. Изменить надписи на кнопках в соответствии с рисунком. Для этого двойным щелчком на каждой кнопке нужно активировать редактор свойств, в котором следует изменить значение свойства Caption.

5. В среде разработки выполнить команду File ? New, указать тип создаваемого файла C/C++ Header File, задать его имя DogClass и нажать кнопку OK. В окне редактора будет открыт новый пустой файл. В этом файле нужно объявить новый класс, как показано в листинге 5.2.

Листинг 5.2

class Dog {

public:

Dog;

~Dog;

wchar_t Name;

int age;

void Speak{

char mm[32];

wchar_t *szStr = L"";

wchar_t mstr[32];

sprintf(mm,"Мой возраст: %d\n", age);

strcat(mm,"лет");

mbstowcs(mstr, mm, 32);

szStr = mstr;

MessageBox(NULL, szStr, TEXT(«TUT»), 0);

};

};

Dog::Dog{

age = 12;

};

Dog::~Dog{

};

Поделиться:
Популярные книги

Сердце Дракона. Том 20. Часть 1

Клеванский Кирилл Сергеевич
20. Сердце дракона
Фантастика:
фэнтези
боевая фантастика
городское фэнтези
5.00
рейтинг книги
Сердце Дракона. Том 20. Часть 1

Холодный ветер перемен

Иванов Дмитрий
7. Девяностые
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Холодный ветер перемен

Последнее желание

Сапковский Анджей
1. Ведьмак
Фантастика:
фэнтези
9.43
рейтинг книги
Последнее желание

Отмороженный 7.0

Гарцевич Евгений Александрович
7. Отмороженный
Фантастика:
рпг
аниме
5.00
рейтинг книги
Отмороженный 7.0

Наследник

Кулаков Алексей Иванович
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги
Наследник

Магия чистых душ 2

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.56
рейтинг книги
Магия чистых душ 2

Наследие Маозари 5

Панежин Евгений
5. Наследие Маозари
Фантастика:
фэнтези
юмористическое фэнтези
5.00
рейтинг книги
Наследие Маозари 5

Локки 4 Потомок бога

Решетов Евгений Валерьевич
4. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Локки 4 Потомок бога

Граф

Ланцов Михаил Алексеевич
6. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Граф

Миф об идеальном мужчине

Устинова Татьяна Витальевна
Детективы:
прочие детективы
9.23
рейтинг книги
Миф об идеальном мужчине

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Здравствуй, 1984-й

Иванов Дмитрий
1. Девяностые
Фантастика:
альтернативная история
6.42
рейтинг книги
Здравствуй, 1984-й

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Барон не играет по правилам

Ренгач Евгений
1. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон не играет по правилам