Rich Edit

Введение...

О richedit контроле можно думать, как о функционально-расширенном средстве редактирования. Он обеспечивает множество полезных особенностей, которых нет в простых средствах редактирования, например, возможность использовать множество видов и размеров шрифта, глубокий уровень отмены/ восстановления, операцией поиска по тексту, встроенные OLE-объекты, поддержка редактирования методом перетаскивания (drag-and-drop), и т.д. Так как richedit контрол имеет так много особенностей, он сохранен в отдельной DLL-библиотеке. Это также означает что, чтобы его использовать, вам недостаточно просто вызывать InitCommonControls, как в других Common-контролах. Вы должны вызвать LoadLibrary, чтобы загрузить richedit DLL.

На данный момент существует четыре версии библиотек RichEdit:

Версии dll -> имя класса
Имя Версия Имя класса
Riched32.dll 1.0 RICHEDIT
RichED20.dll 2.0 RICHEDIT20A
RichED20.dll 3.0 RICHEDIT20A
Msftedit.dll 4.1 RICHEDIT_CLASS

RichEdit версия 2 и 3 использует то же самое имя DLL, как и имя класса. Официального метода различия между версиями 2.0 и 3.0 по всей видимости не существует.

По рекомендации MSDN следует использовать следующие имена классов:
RichEdit – для версии 1.0
RICHEDIT_CLASS(макрос) – для версии 2.0 и более новых.

Версии встроенных библиотек RichEdit
OS Версия
Windows XP SP1 4.1 , 3.0 , эмулятор версии 1.0
Windows XP 3.0, эмулятор версии 1.0
Windows ME 1.0, 3.0
NT 4 1.0, 2.0
98 1.0, 2.0
95 1.0
1234 56 int b;78
Для использования RichEdit необходимо подключить заголовочный файл “Richedit.h”.
Prime:
#include "tchar.h"
#include < Commdlg.h >
#include "Richedit.h"
#pragma comment(lib,"Comdlg32.lib")
HMODULE hmod=NULL;
/**/
//после цикла выборки сообщений необходимо вызвать..
FreeLibrary(hmod); //…чтобы выгрузить библиотеку из памяти
/**/
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static HWND hedit,hwndRichEdit;
HMENU RichEditID((HMENU)300);
TCHAR *cl_name;

switch (message)
{
case WM_CREATE:
cl_name = new TCHAR[12];
hmod = LoadLibrary(_T("RichEd20.dll")); //Загружаем
_tcscpy(cl_name,_T("richedit20A"));
if(!hmod){
MessageBox(hWnd,L"RichEd dll 2.0 not found",L"Error",1); hmod=LoadLibrary(_T("Riched32.dll")); _tcscpy(cl_name,_T("RICHEDIT")); if(!hmod){
MessageBox(hWnd,L"RichEd dll not found",L"Error",1);
Error();
}
}
hedit=CreateWindow(cl_name,
_T("Откройте текстовый файл..."),
WS_CHILD
|WS_VISIBLE
|WS_BORDER
|ES_MULTILINE
|WS_VSCROLL
|ES_NOHIDESEL,
20,20,
200,200,
hWnd,
(HMENU)ID_EDIT,
hInst,
0
);
delete []cl_name;

Основные сообщения.

ID Описание
EM_CANPASTE С помощью этого сообщения можно проверить возможность вставки данных из универсального буфера обмена Clipboard в орган управления Rich Edit
EM_DISPLAYBAND Отображение фрагмента текста, предварительно отформатированного сообщением EM_FORMATRANGE
EM_EXGETSEL Определение начальной и конечной позиции выделенного фрагмента текста
EM_EXLIMITTEXT Установка предельного значения для объема текста, который можно записать в орган управления Rich Edit
EM_LINEFROMCHAR Определение номера строки, в которой расположен символ с заданным номером (считая от начала текста)
EM_EXSETSEL Выделение фрагмента текста
EM_FINDTEXT Поиск фрагмента текста
EM_FINDTEXTEX Расширенный поиск фрагмента текста
EM_FINDWORDBREAK Поиск символа переноса слова на другую строку
EM_FORMATRANGE Форматирование фрагмента или всего текста для отображения в заданном контексте устройства. Используется, например, для печати
EM_GETCHARFORMAT Определение текущих атрибутов форматирования
EM_GETEVENTMASK Получение маски событий, которая определяет набор извещений, посылаемых органом управления Rich Edit родительскому окну
EM_GETPARAFORMAT Определение атрибутов форматирования параграфа
EM_GETSELTEXT Переписывание в заданный буфер выделенного текста
EM_GETTEXTRANGE Переписывание в заданный буфер заданного фрагмента текста
EM_HIDESELECTION Разрешение или запрещение визуального отображения выделения текста
EM_PASTESPECIAL Запись данных в заданном формате из универсального буфера обмена Clipboard в орган управления Rich Edit
EM_REQUESTRESIZE После получения этого сообщения окно Rich Edit посылает родительскому окну извещение EN_REQUESTRESIZE. Это извещение означает, что размеры окна Rich Edit изменились
EM_SELECTIONTYPE Определение типа выделения: текст, один или несколько OLE -объектов
EM_SETBKGNDCOLOR Установка цвета фона для окна органа управления Rich Edit
EM_SETCHARFORMAT Установка атрибутов форматирования текста
EM_SETEVENTMASK Установка маски событий, которая определяет набор извещений, посылаемых органом управления Rich Edit родительскому окну
EM_SETOPTIONS Установка режимов работы и стилей органа управления Rich Edit, таких как ES_AUTOVSCROLL, ES_READONLY, ES_SAVESEL и т. д.
EM_SETPARAFORMAT Установка атрибутов форматирования параграфа текста
EM_SETTARGETDEVICE Установка контекста устройства отображения и ширины строки для обеспечения работы в режиме WYSIWYG (What You See Is What You Get - что вы видите, то и получите (имеется в виду, при печати)
EM_STREAMIN Запись в орган управления Rich Edit данных с замещением из потока данных (из файла). Можно указывать обычный текстовый формат или формат RTF
EM_STREAMOUT Сохранение содержимого органа управления Rich Edit в потоке (в файле). Можно указывать обычный текстовый формат или формат RTF