Окт 16

Примитивный текстовый редактор

Программа Турег, демонстрирует принципы и технику обработки аппаратных и символьных сообщений клавиатуры. Программу можно рассматривать как примитивный текстовый редактор. Пользователь может набирать в окне текст, переходить на следующую строку, нажимая клавишу Enter, перемещать каретку по уже набранному тексту при помощи клавиш управления курсором, вводить новый текст в том месте, на которое указывает каретка, или удалять предшествующий символ. Однако у этого редактора нет ни полос прокрутки, ни функций поиска и замены строк, ни возможности сохранять текст в файле.
Для хранения текста, введенного с клавиатуры, в программе используется объект класса string из стандартной библиотеки C++ вместо традиционной С-стро-ки. Благодаря автоматическому управлению выделением и освобождением памяти в этом классе мы можем писать более компактный программный код, не отвлекаясь на детали реализации.
Чтобы использовать в программе объекты класса string, необходимо в начале файла добавить следующие директивы:
#1 include
using namespace std;
Переменная (объект класса string) для хранения введенных символов объявляется следующим оператором:
static string text;
Спецификатор static необходим для сохранения текущего значения переменной text до следующего вызова оконной процедуры2.
Хотя предполагается, что читатель знаком с классом string, мы все же напомним назначение тех операций и методов класса, которые используются в коде.
Добавление символа symb в конец строки осуществляется с помощью операции +=:
text += symb:
Метод insert позволяет вставлять символ symb в произвольную позицию index:
text.insert(index, symb);
Для удаления п символов, начиная с позиции index, вызывается метод erase:
text.erase(index, n);
В любой момент можно узнать текущий размер строки при помощи метода size, например, в выражениях, подобных следующему:
nLines = text.sizeO / nCharPerLine;
И наконец, содержимое строки text можно преобразовать к типу обычной С-строки при помощи метода c_str. А это пригодится при вызове функции TextOut, поскольку она принимает в качестве четвертого параметра адрес С-строки.
Обратите внимание на обработку сообщений WM_KEYDOWN, WM_CHAR, WM_SETFOCUS, WM_KILLFOCUS, а также на использование редактором Турег системного фиксированного шрифта для вывода текста. Создание текстового редактора для пропорционального шрифта было бы более трудной задачей.