}
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.
РљСЂРѕРјРµ обязательного объявления всех именованных объектов, РёС… еще необходимо инициализировать, то есть присвоить РёРј начальное значение. Некоторые объекты инициализируются РїСЂРё создании, некоторые – нет. РќРµ нужно инициализировать переменные Рё объекты, объявленные внутри функций. Р’ результате этого неинициализированные объекты РјРѕРіСѓС‚ иметь неопределенное значение. Рто неопределенное значение РїСЂРё его случайном использовании может дать непредсказуемый результат.