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 で使用可能な表示クラスを参照してください。
継承階層
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 の呼び出しによって実行されます。 既定の実装では、テキストが見つからない場合、 OnFindNext
は OnTextNotFound を呼び出します。
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
は、オブジェクト記述データに先行することなく、テキストのみを読み書きするという点で、 CEditView
の Serialize
の内部実装とは異なります。
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 クラス