Класс CEditView
Тип класса представления, который предоставляет функциональные возможности элемента управления "поле ввода" Windows и может использоваться для реализации простой функциональности текстового редактора.
Синтаксис
class CEditView : public CCtrlView
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CEditView::CEditView | Создает объект типа CEditView . |
Открытые методы
Имя | Описание |
---|---|
CEditView::FindText | Выполняет поиск строки в тексте. |
CEditView::GetBufferLength | Получает длину буфера символов. |
CEditView::GetEditCtrl | Предоставляет доступ к CEdit части CEditView объекта (элемент управления редактирования Windows). |
CEditView::GetPrinterFont | Извлекает текущий шрифт принтера. |
CEditView::GetSelectedText | Извлекает текущий фрагмент текста. |
CEditView::LockBuffer | Блокирует буфер. |
CEditView::P rintInsideRect | Отрисовывает текст внутри заданного прямоугольника. |
CEditView::SerializeRaw | Сериализует CEditView объект на диск в виде необработанного текста. |
CEditView::SetPrinterFont | Задает новый шрифт принтера. |
CEditView::SetTabStops | Задает остановки вкладки для отображения экрана и печати. |
CEditView::UnlockBuffer | Разблокирует буфер. |
Защищенные методы
Имя | Описание |
---|---|
CEditView::OnFindNext | Находит следующее вхождение текстовой строки. |
CEditView::OnReplaceAll | Заменяет все вхождения заданной строки новой строкой. |
CEditView::OnReplaceSel | Заменяет текущий выбор. |
CEditView::OnTextNotFound | Вызывается, когда операция поиска не соответствует любому дополнительному тексту. |
Открытые члены данных
Имя | Описание |
---|---|
CEditView::d wStyleDefault | Стиль по умолчанию для объектов типа CEditView . |
Замечания
Класс CEditView
предоставляет следующие дополнительные функции:
Печать.
Найдите и замените.
Так как класс CEditView
является производным от класса, объекты класса CEditView
CView
можно использовать с документами и шаблонами документов.
Текст каждого CEditView
элемента управления хранится в собственном глобальном объекте памяти. Приложение может иметь любое количество CEditView
объектов.
Создайте объекты типа CEditView
, если требуется окно редактирования с добавленными функциями, перечисленными выше, или если требуется простая функция текстового редактора. Объект CEditView
может занять всю клиентская область окна. Наследуйте собственные классы от CEditView
добавления или изменения основных функций или объявления классов, которые можно добавить в шаблон документа.
Реализация класса CEditView
по умолчанию обрабатывает следующие команды: ID_EDIT_SELECT_ALL, ID_EDIT_FIND, ID_EDIT_REPLACE, ID_EDIT_REPEAT и ID_FILE_PRINT.
Ограничение CEditView
символов по умолчанию — (1024 * 1024 – 1 = 1048575). Это можно изменить, вызвав функцию EM_LIMITTEXT базового элемента управления редактирования. Однако ограничения отличаются в зависимости от операционной системы и типа элемента управления редактированием (один или многострочного). Дополнительные сведения об этих ограничениях см. в EM_LIMITTEXT.
Чтобы изменить это ограничение в элементе управления, переопределите OnCreate()
функцию для класса CEditView
и вставьте следующую строку кода:
GetEditCtrl().SetLimitText(nNewVal); //nNewVal, the new character limit
Объекты типа CEditView
(или типы, производные от CEditView
) имеют следующие ограничения:
CEditView
не реализует значение true, что вы видите, является то, что вы получаете (WYSIWYG) редактирование. Где есть выбор между удобочитаемостью на экране и сопоставлением печатных выходных данных,CEditView
выбирает удобочитаемость экрана.CEditView
может отображать текст только в одном шрифте. Не поддерживается специальное форматирование символов. Дополнительные возможности см. в классе CRichEditView .Объем текста, который
CEditView
может содержать, ограничен. Ограничения совпадают с ограничениями дляCEdit
элемента управления.
Дополнительные сведения см CEditView
. в разделе "Производные классы представлений", доступные в MFC.
Иерархия наследования
CEditView
Требования
Заголовок: afxext.h
CEditView::CEditView
Создает объект типа CEditView
.
CEditView();
Замечания
После создания объекта необходимо вызвать функцию CWnd::Create перед использованием элемента управления редактированием. Если вы наследуете класс из CEditView
шаблона и добавляете его в шаблон, платформа CWinApp::AddDocTemplate
вызывает как этот конструктор, так и Create
функцию.
CEditView::d wStyleDefault
Содержит стиль CEditView
объекта по умолчанию.
static const DWORD dwStyleDefault;
Замечания
Передайте этот статический элемент в качестве параметра Create
dwStyle функции, чтобы получить стиль по умолчанию для CEditView
объекта.
CEditView::FindText
Вызовите функцию FindText
для поиска текстового CEditView
буфера объекта.
BOOL FindText(
LPCTSTR lpszFind,
BOOL bNext = TRUE,
BOOL bCase = TRUE);
Параметры
lpszFind
Найденный текст.
bNext
Указывает направление поиска. Если значение TRUE, направление поиска находится в конце буфера. Если значение FALSE, направление поиска находится в начале буфера.
bCase
Указывает, учитывается ли поиск регистра. Если значение TRUE, поиск учитывает регистр. Если значение FALSE, поиск не учитывает регистр.
Возвращаемое значение
Ненулевое значение, если найден текст поиска; в противном случае — 0.
Замечания
Эта функция выполняет поиск текста в буфере для текста, указанного lpszFind, начиная с текущего выделения, в направлении, указанном bNext, и с учетом регистра, заданного bCase. Если текст найден, он задает выделенный текст для найденного текста и возвращает ненулевое значение. Если текст не найден, функция возвращает значение 0.
Обычно не требуется вызывать функцию FindText
, если вы не переопределяете OnFindNext
, что вызывает FindText
.
CEditView::GetBufferLength
Вызовите эту функцию-член, чтобы получить количество символов в буфере элемента управления редактирования, не включая конечный элемент NULL.
UINT GetBufferLength() const;
Возвращаемое значение
Длина строки в буфере.
CEditView::GetEditCtrl
Вызов GetEditCtrl
для получения ссылки на элемент управления редактирования, используемый представлением редактирования.
CEdit& GetEditCtrl() const;
Возвращаемое значение
Ссылка на объект CEdit
.
Замечания
Этот элемент управления имеет тип CEdit, поэтому вы можете управлять элементом управления редактированием Windows непосредственно с помощью CEdit
функций-членов.
Внимание
CEdit
С помощью объекта можно изменить состояние базового элемента управления редактирования Windows. Например, не следует изменять параметры вкладки с помощью функции CEdit::SetTabStops , так как CEditView
кэширует эти параметры для использования как в элементе управления редактированием, так и в печати. Вместо этого используйте CEditView::SetTabStops.
Пример
void CMyEditView::OnInitialUpdate()
{
CEditView::OnInitialUpdate();
// get the edit control and set some initial properties for it
CEdit &theEdit = GetEditCtrl();
// adjust the left margin without changing the right margin
DWORD dwMargins = theEdit.GetMargins();
theEdit.SetMargins(20, HIWORD(dwMargins));
// only accept 10k of text
theEdit.SetLimitText(10 * 1024);
}
CEditView::GetPrinterFont
Вызов GetPrinterFont
для получения указателя на объект CFont , описывающий текущий шрифт принтера.
CFont* GetPrinterFont() const;
Возвращаемое значение
Указатель на объект, указывающий текущий CFont
шрифт принтера; ЗНАЧЕНИЕ NULL, если шрифт принтера не задан. Указатель может быть временным. Его не требуется сохранять для дальнейшего использования.
Замечания
Если шрифт принтера не задан, поведение CEditView
печати класса по умолчанию — печать с помощью того же шрифта, который используется для отображения.
Используйте эту функцию для определения текущего шрифта принтера. Если он не является нужным шрифтом принтера, используйте CEditView::SetPrinterFont , чтобы изменить его.
CEditView::GetSelectedText
Вызов GetSelectedText
для копирования выделенного текста в CString
объект до конца выделения или символа, предшествующего первому символу возврата каретки в выделенном фрагменте.
void GetSelectedText(CString& strResult) const;
Параметры
strResult
Ссылка на CString
объект, который требуется получить выделенный текст.
CEditView::LockBuffer
Вызовите эту функцию-член, чтобы получить указатель на буфер. Буфер не должен быть изменен.
LPCTSTR LockBuffer() const;
Возвращаемое значение
Указатель на буфер элемента управления редактирования.
CEditView::OnFindNext
Выполняет поиск текста в буфере для текста, указанного lpszFind, в направлении, указанном bNext, с учетом регистра, указанного bCase.
virtual void OnFindNext(
LPCTSTR lpszFind,
BOOL bNext,
BOOL bCase);
Параметры
lpszFind
Найденный текст.
bNext
Указывает направление поиска. Если значение TRUE, направление поиска находится в конце буфера. Если значение FALSE, направление поиска находится в начале буфера.
bCase
Указывает, учитывается ли поиск регистра. Если значение TRUE, поиск учитывает регистр. Если значение FALSE, поиск не учитывает регистр.
Замечания
Поиск начинается в начале текущего выбора и выполняется с помощью вызова FindText. В реализации по умолчанию вызывает OnTextNotFound, OnFindNext
если текст не найден.
Переопределите OnFindNext
, чтобы изменить способ поиска текста производного CEditView
объекта. CEditView
вызывается OnFindNext
, когда пользователь нажимает кнопку "Найти далее" в стандартном диалоговом окне "Поиск".
CEditView::OnReplaceAll
CEditView
вызывается OnReplaceAll
, когда пользователь выбирает кнопку "Заменить все" в диалоговом окне "Замена" в стандартном диалоговом окне "Замена".
virtual void OnReplaceAll(
LPCTSTR lpszFind,
LPCTSTR lpszReplace,
BOOL bCase);
Параметры
lpszFind
Найденный текст.
lpszReplace
Текст для замены текста поиска.
bCase
Указывает, учитывается ли поиск регистра. Если значение TRUE, поиск учитывает регистр. Если значение FALSE, поиск не учитывает регистр.
Замечания
OnReplaceAll
выполняет поиск текста в буфере для текста, указанного lpszFind, с учетом регистра, заданного bCase. Поиск начинается в начале текущего выбора. При каждом обнаружении текста поиска эта функция заменяет вхождение текста текстом, указанным lpszReplace. Поиск выполняется с помощью вызова FindText. В реализации по умолчанию OnTextNotFound вызывается, если текст не найден.
Если текущий выбор не соответствует lpszFind, выделение обновляется до первого вхождения текста, указанного lpszFind, и замена не выполняется. Это позволяет пользователю подтвердить, что это то, что они хотят сделать, если выделение не соответствует тексту, который будет заменен.
Переопределите OnReplaceAll
, чтобы изменить способ CEditView
замены текста производным объектом.
CEditView::OnReplaceSel
CEditView
вызывает OnReplaceSel
, когда пользователь нажимает кнопку "Заменить" в диалоговом окне "Замена" в стандартном диалоговом окне.
virtual void OnReplaceSel(
LPCTSTR lpszFind,
BOOL bNext,
BOOL bCase,
LPCTSTR lpszReplace);
Параметры
lpszFind
Найденный текст.
bNext
Указывает направление поиска. Если значение TRUE, направление поиска находится в конце буфера. Если значение FALSE, направление поиска находится в начале буфера.
bCase
Указывает, учитывается ли поиск регистра. Если значение TRUE, поиск учитывает регистр. Если значение FALSE, поиск не учитывает регистр.
lpszReplace
Текст для замены найденного текста.
Замечания
После замены выделения эта функция выполняет поиск текста в буфере для следующего вхождения текста, указанного lpszFind, в направлении, указанном bNext, с учетом регистра, заданного bCase. Поиск выполняется с помощью вызова FindText. Если текст не найден, вызывается OnTextNotFound .
Переопределите OnReplaceSel
, чтобы изменить способ CEditView
замены выделенного текста производным объектом.
CEditView::OnTextNotFound
Переопределите эту функцию, чтобы изменить реализацию по умолчанию, которая вызывает функцию MessageBeep
Windows.
virtual void OnTextNotFound(LPCTSTR lpszFind);
Параметры
lpszFind
Найденный текст.
CEditView::P rintInsideRect
Вызов PrintInsideRect
печати текста в прямоугольнике, заданном rectLayout.
UINT PrintInsideRect(
CDC *pDC,
RECT& rectLayout,
UINT nIndexStart,
UINT nIndexStop);
Параметры
pDC
Указатель на контекст устройства принтера.
rectLayout
Ссылка на объект CRect или структуру RECT, указывающую прямоугольник, в котором будет отображаться текст.
nIndexStart
Индекс в буфере первого символа для отрисовки.
nIndexStop
Индекс в буфере символа после последнего символа для отрисовки.
Возвращаемое значение
Индекс следующего символа, который должен быть напечатан (то есть символ после последнего отрисованного символа).
Замечания
Если элемент CEditView
управления не имеет стиля ES_AUTOHSCROLL, текст упаковывается в прямоугольник отрисовки. Если элемент управления имеет стиль ES_AUTOHSCROLL, текст обрезается в правом краю прямоугольника.
Элемент rect.bottom
объекта rectLayout изменяется таким образом, чтобы размеры прямоугольника определяют часть исходного прямоугольника, занятого текстом.
CEditView::SerializeRaw
Вызов SerializeRaw
для CArchive
чтения или записи текста объекта в CEditView
текстовый файл.
void SerializeRaw(CArchive& ar);
Параметры
ар
Ссылка на CArchive
объект, в который хранится сериализованный текст.
Замечания
SerializeRaw
отличается от CEditView
внутренней Serialize
реализации, в которую она считывает и записывает только текст без предыдущих данных описания объектов.
CEditView::SetPrinterFont
Вызов, SetPrinterFont
чтобы задать шрифт принтера шрифту, указанному pFont.
void SetPrinterFont(CFont* pFont);
Параметры
pFont
Указатель на объект типа CFont
. Если значение NULL, шрифт, используемый для печати, основан на шрифте отображения.
Замечания
Если вы хотите, чтобы представление всегда использовало определенный шрифт для печати, включите вызов SetPrinterFont
в функцию класса OnPreparePrinting
. Эта виртуальная функция вызывается перед печатью, поэтому изменение шрифта происходит перед печатью содержимого представления.
CEditView::SetTabStops
Вызовите эту функцию, чтобы задать остановки табуляции, используемые для отображения и печати.
void SetTabStops(int nTabStops);
Параметры
nTabStops
Ширина каждой остановки вкладки в диалоговых единицах.
Замечания
Поддерживается только одна ширина табуляции. ( CEdit
объекты поддерживают несколько ширин табуляции.) Ширины находятся в диалоговых единицах, равных одной четверти средней ширины символов (только на основе букв верхнего и нижнего регистра) шрифта, используемого во время печати или отображения. Не следует использовать CEdit::SetTabStops
, так как CEditView
необходимо кэшировать значение табуляции.
Эта функция изменяет только вкладки объекта, для которого он вызывается. Чтобы изменить табуляции для каждого CEditView
объекта в приложении, вызовите функцию каждого объекта SetTabStops
.
Пример
Этот фрагмент кода задает табуляции в элементе управления каждый четвертый символ, тщательно измеряя шрифт, который использует элемент управления.
// gain a reference to the edit control
CEdit &theEdit = GetEditCtrl();
// get the font the control is using
CFont *pFont = theEdit.GetFont();
TEXTMETRIC tm;
// get the control's DC, too
CDC *pDC = theEdit.GetDC();
// Select the font that the control uses by default into the DC.
// We must do this because the control may or may not be using
// that font at this exact moment
CFont *pOldFont = pDC->SelectObject(pFont);
// Retrieve text metrics for that font and return the previously
// selected font.
pDC->GetTextMetrics(&tm);
pDC->SelectObject(pOldFont);
// Get an identity rectangle and map it to dialog units
CRect rect(0, 0, 100, 1);
::MapDialogRect((HWND)this, rect);
// We now know that 100 dialog units are rect.Width() screen units,
// so we can multiply screen units by 100 and divide by rect.Width()
// to find dialog units from screen units. tm.tmAveCharWidth is
// the width of _one_ character, so setting the tabs at every
// four characters means we also multiply by four.
SetTabStops((4 * tm.tmAveCharWidth * 100) / rect.Width());
CEditView::UnlockBuffer
Вызовите эту функцию-член, чтобы разблокировать буфер.
void UnlockBuffer() const;
Замечания
Вызов UnlockBuffer
после завершения использования указателя, возвращенного LockBuffer.
См. также
Пример СУПЕРPAD MFC
Класс CCtrlView
Диаграмма иерархии
Класс CEdit
Класс CDocument
Класс CDocTemplate
Класс CCtrlView
Класс CRichEditView