Волнистая строка под словом (Win32) - PullRequest
1 голос
/ 24 апреля 2010

Я хочу реализовать базовую проверку орфографии в проекте клона Notepad, который я делаю. Я хочу подчеркнуть неправильно написанные слова волнистыми, как Word. Я думаю, что мне нужно использовать GDI и рисовать в текстовом поле, но я не уверен, как рисовать на элементах управления. Спасибо

Ответы [ 2 ]

3 голосов
/ 24 апреля 2010

Если вы основываете свой редактор на элементе редактирования (как это делает Блокнот), то я думаю, что это будет сложно. Используя подклассы окна управления редактированием, вы, вероятно, могли бы расширить его обработку WM_PAINT. Но проблема в том, что элемент управления не позволяет вам точно определить, где слово появляется в элементе управления. Таким образом, вы не будете знать, где нарисовать загогулины.

Возможно, вы сможете использовать элемент управления Rich Edit (как это делает WordPad) и настроить стиль слов с ошибками. Я никогда не использовал Rich Edit, поэтому не могу помочь с деталями.

0 голосов
/ 24 апреля 2010

На самом деле, я не уверен насчет метода, который вы используете для визуализации текста в вашем окне, и я думаю, что вам нужно его конкретизировать.

Если все сделано с использованием winapi / gdi (вообще говоря, это будет TextOut текущий текстовый блок, который соответствует окну с учетом переноса и т. Д.), Вы должны добавить еще одну процедуру, которая будет обрабатывать орфографические ошибки перевод слов.

Опять же, это также зависит от вашего способа сохранения текущего текста и его параметров, но идея состоит в том, чтобы реализовать какую-то функцию, такую ​​как RenderMisspelledWord(...), которая бы взяла ваш общий класс обработки текста или какой-то класс рендерера или даже (X, Y, Length) в качестве параметров. Эта функция будет вызываться из более общего метода Render, который вызывается из обработчика WM_PAINT.

То, что он будет делать, также зависит от архитектуры вашего блокнота, но, например, в последнем случае это потребует рисования * / \ / \ / \ * частей подчеркивания с использованием подпрограмм GDI (строки) .

Вообще говоря, любой другой случай (с обработкой классов) также приведет к следующему действию, но с более высоким уровнем абстракции.

...