CEditView クラス

Windows のエディット コントロールの機能を提供するビュー クラスの一種であり、シンプルなテキスト編集エディターを実装できます。

構文

class CEditView : public CCtrlView

メンバー

パブリック コンストラクター

名前 説明
CEditView::CEditView CEditView 型のオブジェクトを構築します。

パブリック メソッド

名前 説明
CEditView::FindText テキスト内の文字列を検索します。
CEditView::GetBufferLength 文字バッファーの長さを取得します。
CEditView::GetEditCtrl CEditView オブジェクトのCEdit部分 (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 はクラス CViewの派生物であるため、クラス CEditView のオブジェクトはドキュメントおよびドキュメント テンプレートで使用できます。

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を参照してください。

コントロールでこの制限を変更するには、CEditView クラスのOnCreate()関数をオーバーライドし、次のコード行を挿入します。

GetEditCtrl().SetLimitText(nNewVal); //nNewVal, the new character limit

CEditView型 (またはCEditViewから派生した型) のオブジェクトには、次の制限があります。

  • CEditView は、あなたが見るものがあなたが得るもの(WYSIWYG)編集である真を実装していません。 画面上の読みやすさと一致する印刷出力の選択がある場合は、 CEditView 画面の読みやすさを選択します。

  • CEditView では、テキストを 1 つのフォントでのみ表示できます。 特殊文字の書式設定はサポートされていません。 より優れた機能については、クラス CRichEditView を参照してください。

  • CEditViewに含めることができるテキストの量は限られています。 制限は、 CEdit コントロールの場合と同じです。

CEditViewの詳細については、「MFC で使用可能な表示クラスを参照してください。

継承階層

CObject

CCmdTarget

CWnd

CView

CCtrlView

CEditView

要件

Header: 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 以外。それ以外の場合は 0。

解説

この関数は、バッファー内のテキストを検索し、現在の選択範囲から lpszFind で指定されたテキストを、 bNext で指定された方向で検索し、大文字と小文字の区別 bCaseで指定します。 テキストが見つかった場合は、選択範囲を見つかったテキストに設定し、0 以外の値を返します。 テキストが見つからない場合、関数は 0 を返します。

通常、FindTextを呼び出すOnFindNextをオーバーライドしない限り、FindText関数を呼び出す必要はありません。

CEditView::GetBufferLength

このメンバー関数を呼び出して、null ターミネータを含まない編集コントロールのバッファーに現在含まれている文字数を取得します。

UINT GetBufferLength() const;

戻り値

バッファー内の文字列の長さ。

CEditView::GetEditCtrl

GetEditCtrlを呼び出して、編集ビューで使用される編集コントロールへの参照を取得します。

CEdit& GetEditCtrl() const;

戻り値

CEdit オブジェクトへの参照です。

解説

このコントロールは CEdit 型であるため、 CEdit メンバー関数を使用して Windows 編集コントロールを直接操作できます。

注意事項

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 の呼び出しによって実行されます。 既定の実装では、テキストが見つからない場合、 OnFindNextOnTextNotFound を呼び出します。

CEditView派生オブジェクトがテキストを検索する方法を変更するには、OnFindNextをオーバーライドします。 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

Windows 関数 MessageBeepを呼び出す既定の実装を変更するには、この関数をオーバーライドします。

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がある場合、テキストは四角形の右端にクリップされます。

rectLayout オブジェクトのrect.bottom要素が変更され、四角形の寸法によって、テキストによって占有される元の四角形の部分が定義されます。

CEditView::SerializeRaw

SerializeRawを呼び出して、CArchive オブジェクトでCEditView オブジェクト内のテキストをテキスト ファイルに読み書きします。

void SerializeRaw(CArchive& ar);

パラメーター

ar
シリアル化されたテキストを格納する CArchive オブジェクトへの参照。

解説

SerializeRaw は、オブジェクト記述データに先行することなく、テキストのみを読み書きするという点で、 CEditViewSerialize の内部実装とは異なります。

CEditView::SetPrinterFont

SetPrinterFontを呼び出して、プリンター フォントを pFont で指定されたフォントに設定します。

void SetPrinterFont(CFont* pFont);

パラメーター

pFont
CFont型のオブジェクトへのポインター。 NULL の場合、印刷に使用されるフォントは表示フォントに基づいています。

解説

ビューで印刷に特定のフォントを常に使用する場合は、クラスのOnPreparePrinting関数にSetPrinterFontの呼び出しを含めます。 この仮想関数は、印刷が行われる前に呼び出されるため、ビューの内容が印刷される前にフォントの変更が行われます。

CEditView::SetTabStops

この関数を呼び出して、表示と印刷に使用するタブ位置を設定します。

void SetTabStops(int nTabStops);

パラメーター

nTabStops
各タブ位置の幅 (ダイアログ 単位)。

解説

タブストップ幅は 1 つだけサポートされています。 ( CEdit オブジェクトは複数のタブ幅をサポートします。幅はダイアログ単位で、印刷時または表示時に使用されるフォントの平均文字幅の 4 分の 1 に相当します (大文字と小文字のみ)。 CEditViewはタブストップ値をキャッシュする必要があるため、CEdit::SetTabStopsを使用しないでください。

この関数は、呼び出されるオブジェクトのタブのみを変更します。 アプリケーション内の各 CEditView オブジェクトのタブ位置を変更するには、各オブジェクトの SetTabStops 関数を呼び出します。

このコード フラグメントは、コントロールが使用するフォントを慎重に測定することで、コントロール内のタブ位置を 4 文字ごとに設定します。

// 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;

解説

LockBuffer によって返されるポインターの使用が完了したら、UnlockBufferを呼び出します。

関連項目

MFC サンプル SUPERPAD
CCtrlView クラス
階層図
CEdit クラス
CDocument クラス
CDocTemplate クラス
CCtrlView クラス
CRichEditView クラス