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

на главную

Жанры

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

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

Шрифт:

«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{

};

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

По осколкам твоего сердца

Джейн Анна
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
5.56
рейтинг книги
По осколкам твоего сердца

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Провинциал. Книга 6

Лопарев Игорь Викторович
6. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Провинциал. Книга 6

Эфир. Терра 13

Скабер Артемий
1. Совет Видящих
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эфир. Терра 13

Её (мой) ребенок

Рам Янка
Любовные романы:
современные любовные романы
6.91
рейтинг книги
Её (мой) ребенок

Темный Патриарх Светлого Рода 3

Лисицин Евгений
3. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 3

Великий князь

Кулаков Алексей Иванович
2. Рюрикова кровь
Фантастика:
альтернативная история
8.47
рейтинг книги
Великий князь

Академия

Сай Ярослав
2. Медорфенов
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Академия

Вторая невеста Драконьего Лорда. Дилогия

Огненная Любовь
Вторая невеста Драконьего Лорда
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Вторая невеста Драконьего Лорда. Дилогия

Мир-о-творец

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

Невеста вне отбора

Самсонова Наталья
Любовные романы:
любовно-фантастические романы
7.33
рейтинг книги
Невеста вне отбора

Адепт: Обучение. Каникулы [СИ]

Бубела Олег Николаевич
6. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.15
рейтинг книги
Адепт: Обучение. Каникулы [СИ]

Мимик нового Мира 8

Северный Лис
7. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 8

Утопающий во лжи 3

Жуковский Лев
3. Утопающий во лжи
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Утопающий во лжи 3