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。
若要變更控制項中的此限制,請覆寫 OnCreate()
類別 CEditView
的函式,並插入下列程式代碼行:
GetEditCtrl().SetLimitText(nNewVal); //nNewVal, the new character limit
型 CEditView
別的物件(或衍生自 CEditView
的類型)具有下列限制:
CEditView
不會實作您看到的內容為您所得到的內容 (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,因此您可以使用成員函式直接 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 。
覆寫 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
覆寫此函式以變更預設實作,這會呼叫 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,則會將文字裁剪在矩形的右邊緣。
rect.bottom
rectLayout 物件的元素會變更,讓矩形的維度定義文字所佔用之原始矩形的一部分。
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,則用於列印的字型是以顯示字型為基礎。
備註
如果您想要讓檢視一律使用特定字型進行列印,請在類別的 函式中包含 對 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;
備註
使用LockBuffer所傳回的指標完成之後呼叫UnlockBuffer
。
另請參閱
MFC 範例 SUPERPAD
CCtrlView 類別
階層架構圖表
CEdit 類別
CDocument 類別
CDocTemplate 類別
CCtrlView 類別
CRichEditView 類別