
- •220300 - Системы автоматизированного проектирования
- •Тема 2. Технологии программирования
- •Тема 2. Технология разработки крупных приложений
- •Структуры
- •Структуры и функции
- •Массивы структур
- •Поиск в массиве структур
- •Вложенность структур
- •Рекурсия
- •Алгоритм быстрой сортировки
- •Массивы структур и бинарные файлы
- •Динамические структуры данных
- •Линейные списки
- •Очереди
- •Контрольная работа
- •Объектно-ориентированное программирование. Классы
- •Конструкторы
- •Перегруженные конструкторы
- •Определение методов класса вне класса
- •Объекты, возвращаемые функцией (методом)
- •Структуры и классы
- •Классы и память
- •Статические данные класса
- •Константные методы
- •Деструкторы
- •Массивы и классы
- •Массивы объектов
- •Строки Строковый тип или стандартный класс string
- •Тип строк AnsiString
- •Перегрузка операций
- •Перегрузка арифметических операций
- •Перегрузка операций сравнения
- •Перегрузка операции приведения типа
- •Преобразования объектов в основные типы и наоборот
- •Преобразование объектов классов в объекты других классов
- •Наследование
- •Конструкторы производного класса
- •Перегрузка функций
- •Иерархия классов
- •Общее и частное наследование. Комбинации доступа
- •Множественное наследование
- •Включение. Классы в классах
- •Виртуальные и дружественные функции
- •Абстрактные классы и чистые виртуальные функции
- •Виртуальные деструкторы
- •Виртуальные базовые классы или устранение неоднозначности при множественном наследовании
- •Дружественные функции
- •Дружественные классы
- •Указатель this
- •Многофайловые программы
- •Распознавание нажатых клавиш
Распознавание нажатых клавиш
Консольные приложения
Если в программе существует необходимость осуществлять какие-то действия, ориентируясь по нажатым пользователем клавишам, то имеет смысл использовать функции getch() или getche(), которые возвращают код нажатой клавиши, не требуя нажатия Enter. Отличаются они друг от друга тем, что первая не отображает символ клавиши, а вторая – отображает. Эти функции распознают символьные клавиши и клавиши Esc, Tab, Space, BackSpace. Они не предназначены для распознавания управляющих (функциональных) клавиш, таких как F1…F12, Del, Shift и т.п. Рассмотрим примеры.
Пример 1:
int main() {
char sim;
cout << "Nagmite 'y' ili 'n': ";
sim = getch(); // не требует нажатия Enter
if(sim == 'y') cout << "\nNagata klavisha 'y'";
if(sim == 'n') cout << "\nNagata klavisha 'n'";
getch(); return 0;
}
Пример 2:
#include <iostream>
#include <conio>
using namespace std;
//---------------------------------------------------------------------------
int main() {
char kl;
cout << "Nagmite lubuyu klavishu: ";
kl = getch();
int kod = int(kl);
if(kod == 27) cout << "\nNagata klavisha Esc";
else cout << "\nKod nagatoy klavishy = " << kod;
getch(); return 0;
}
Визуальные приложения
Для распознавания нажатых клавиш в визуальных приложениях можно пользоваться такими обработчиками событий, как KeyDown, KeyPress, KeyUp.
Пример 1:
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) {
int kod = int(Key);
if(kod == 114)
Application->MessageBoxA("Нажата клавиша F3", "Распознавание клавиш",
MB_ICONWARNING);
else {
AnsiString data = "Код нажатой клавиши: " + IntToStr(kod);
Application->MessageBoxA(data.c_str(), "Код клавиши", MB_ICONWARNING);
}
}
Пример 2:
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) {
if((Key == 'q') && Shift.Contains(ssAlt)) Form1->Close(); //если нажата Alt+Q – закрыть программу
}