KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Владимир Волков - Программирование для карманных компьютеров

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Владимир Волков, "Программирование для карманных компьютеров" бесплатно, без регистрации.
Перейти на страницу:

}

return DefWindowProc (hWnd, wMsg, wParam, lParam);

}

// Блок 9

LRESULT DoDestroyMain (HWND hWnd, UINT wMsg, WPARAM wParam,

LPARAM lParam) {

PostQuitMessage (0);

return 0;

}

// Блок 10

LRESULT DoCharRecieveMain (HWND hWnd, UINT wMsg, WPARAM wParam,

LPARAM lParam) {

HDC hdc;

PAINTSTRUCT ps;

RECT rectCli;

GetClientRect (hWnd, &rectCli);

ps.rcPaint = rectCli;

InvalidateRect (hWnd, &rectCli, true);

hdc = BeginPaint (hWnd, &ps);

szStr = L" GiGoGa";

DrawText (hdc, (const unsigned short *)szStr, – 1, &rectCli,

DT_CENTER | DT_SINGLELINE);

EndPaint (hWnd, &ps);

return 0;

}

// Блок 11

LRESULT CharRec (HWND hWnd, UINT wMsg, WPARAM wParam,

LPARAM lParam) {

switch ((TCHAR)wParam){

case 49: { szStr = L" Нажата клавиша 1 на клавиатуре";}

break;

case 50: { szStr = L" А теперь на клавиатуре нажата клавиша 2";}

break;

}

MyPaint (hWnd, wMsg, wParam, lParam);

return 0;

}

// Блок 12

int MyPaint (HWND hWnd, UINT wMsg, WPARAM wParam,

LPARAM lParam) {

HDC hdc;

PAINTSTRUCT ps;

RECT rectCli;

GetClientRect (hWnd, &rectCli);

ps.rcPaint = rectCli;

InvalidateRect (hWnd, &rectCli, true);

hdc = BeginPaint (hWnd, &ps);

DrawText (hdc, (const unsigned short *)szStr, – 1, &rectCli,

DT_LEFT | DT_WORDBREAK);

EndPaint (hWnd, &ps);

return 0;

}

7. Да, кода получилось много. Почти все, что делает этот код, в eVB можно было сделать без написания кода вообще. Но в eVC практически каждое действие нужно прописывать при помощи серьезных блоков кода. Если вы пишете консольное приложение, то можно обойтись для начала несколькими строками кода. Но если нужно сделать приложение с оконным интерфейсом Windows – засучите рукава, писать придется много. Код, приведенный в листинге, всего лишь создает приложение Windwos CE с одним окном, которое реагирует на нажатие клавиш клавиатуры. Эта заготовка позволит одновременно на практике «прощупать» язык C++ и получить первые навыки работы со средой eVC. После нажатия кнопки Execute Programm программа будет скомпилирована и запущена. При нажатии цифровых клавиш 1 или 2 на виртуальной или на реальной клавиатуре программа выводит на экран соответствующие сообщения.

Краткие сведения о языке C++

Комментарии

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

Однострочные комментарии создаются при помощи двух символов наклонной черты.

// Это строка комментария

В следующем примере показано, как создаются многострочные комментарии.

/* Все эти строки являются комментариями

и должны быть обязательно

закрыты сочетанием звездочки и косой черты */

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

Чтобы посмотреть, как выглядит набор символов ASCII, необходимо продолжить работу над примером.

Упражнение 4.1 (продолжение)

8. В файле MyExp.cpp в конце блока 3 дописать еще одно объявление переменной (массива):

wchar_t mstr[256];

9. В конец файла дописать еще один блок, код которого приведен в листинге 4.3. Листинг 4.3

// Блок 13

void f1(){

mstr[0]=;

for (unsigned short i = 22; i<127; i++){

mstr[i-21]=i;

}

}

10.В Рзменить РєРѕРґ блока 11, как показано РІ листинге 4.4. Листинг 4.4.

case 49: {

f1();

szStr = mstr;}

break;

11. В файле MyExp.h дописать объявление функции в конец блока 4.

void f1();

12. Запустить программу. После нажатия клавиши 1 на экран будет выведена таблица ASCII, а точнее, та ее часть, которая может быть отображена на экране.

Лексемы

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

Типы и объявления, инициализация

Для того чтобы программа заработала на устройстве, текст программы должен быть превращен в исполняемый код. Трансляцией текста программы в исполняемый код занимается специальная программа – компилятор. Но компилятор работает по определенным правилам. Нельзя просто передать ему для компиляции некий блок кода, например, x=y+f(2);. В этом случае компилятор собщит, что он не знает, что такое х, у и f, поэтому придется предпринять некоторые действия, чтобы сообщить компилятору, что это за переменные и что для них имеют смысл действия присваивания, сложения и вызова функции. Каждое имя некоторого объекта (идентификатор) в C++ имеет связанный с этим именем тип. Тип показывает компилятору, какие операции можно применять к имени и как эти операции нужно интерпретировать.

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

float x;

int y;

float f(int);

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

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

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*