共用方式為


SUPERPAD 範例:示範使用 CEditView 編輯文字的視覺化編輯伺服程式

更新:2007 年 11 月

SUPERPAD 範例說明如何結合使用 CEditView 類別和視覺化編輯伺服程式。

安全性注意事項:

這個程式碼範例僅供概念說明之用,同時因為範例中的程式碼撰寫並沒有周全的顧及所有安全性問題,所以本範例不適用於實際執行的應用程式或網站中。如果使用者擅自將範例程式碼用於其他意圖而導致連帶事件或重大損害時,Microsoft 將不承擔任何責任。

若要取得範例和指示以便進行安裝:

  • 按一下 Visual Studio [說明] 功能表上的 [範例]。

    如需詳細資訊,請參閱尋找範例檔案

  • 最新版的完整範例清單可從 Visual Studio 2008 範例網頁 (英文) 取得。

  • 您也可以將範例置於電腦硬碟中。根據預設,範例和讀我檔案都會複製到 \Program Files\Visual Studio 9.0\Samples\ 下的資料夾中。對於所有的 Visual Studio Express 版,所有範例都可在線上找到。

建置和執行範例

若要建置並執行 SUPERPAD 範例

  1. 開啟 superpad.sln 方案。

  2. 在 [建置] 功能表上,按一下 [建置]。

  3. 若要將 SUPERPAD 做為視覺化編輯伺服程式一樣來使用,請將它當做獨立的應用程式執行一次,使其將自己登錄到系統中。

    第一次執行 SUPERPAD 時,它會顯示一個看起來很像 [About] 對話方塊的開頭顯示視窗。這個對話方塊會停留在螢幕上一陣子,時間過了就會消失。若要關閉開頭顯示畫面視窗,請按任何按鍵或是按一下滑鼠。

    SUPERPAD 會記憶上一次您執行時的視窗位置,也會記憶 MDI 架構視窗的文件視窗是否有經過最大化。

其他 SUPERPAD 功能

SUPERPAD 會經由類別衍生來說明 CEditView 的進階使用方式,包括編輯控制項的自動換行狀態切換、變更螢幕和印表機字型。SUPERPAD 也會說明各種不同的 MFC 程式設計技術。

  • [About] 對話方塊會顯示系統資源的使用率。

  • 開頭顯示視窗會在第一次起動應用程式時顯示。

  • 將視窗位置資訊儲存在一個私用的.ini 檔案,以便記住永續性 (Persistent) 視窗配置。

  • 閒置迴圈 (Loop) 處理。

  • 使用等待游標。

  • 子類別化一個視窗。

  • 列印時增加頁面的頁首和頁尾。

  • 列印時進行分頁。

  • 在文件目前的選取範圍上啟動預覽列印。

  • 從預覽列印返回到上一次預覽文件的相同位置。

  • 標準字型對話方塊 (CFontDialog)。

SUPERPAD 功能表

[檔案] 功能表提供標準命令 [新增]、[開啟]、[關閉]、[儲存]、[另存新檔]、[列印]、[預覽列印]、[列印設定]、最近使用的 (MRU) 檔案清單和 [結束]。

[檔案] 功能表也會提供您可以用來指定每頁的頁首和 (或) 頁尾的 [版面設定] 選項。如果不需要的話,可將頁首或是頁尾留空。您可以在頁首和頁尾中指定任何的文字,也可以指定下列任何一種格式化代碼:

  • &f:指定檔案名稱。

  • &p:指定頁碼。

  • 任何格式代碼都是為 C 執行階段的 strftime 函式而定義的。例如,%a 可指定星期日期名稱的縮寫,%B 可指定完整的月份名稱,%d 可指定一個月當中的日期,而 %Y 可以指定以世紀表示的年份。如果您將 SUPERPAD 連結到 MFC 的 DLL 版本,便無法使用這些格式選項,因為在 DLL 中無法使用 strftime

SUPERPAD 提供了下列 [編輯] 功能表命令,根據預設,這些命令是由 CEditView 所處理:[剪下]、[貼上]、[分頁]、[刪除]、[尋找]、[尋找下一個]、[取代]、[全選]以及 [復原]。[編輯] 功能表也會提供 [自動換行] 命令來開啟或關閉自動換行。

[檢視] 功能表提供下列命令,而這個命令可以處理 CEditView 不同的功能:

  • 設定定位停駐點:在對話方塊中輸入一個單精確度整數,取得相同間距的定位停駐點 (Tab Stop)。

  • 設定字型:指定螢幕顯示檔案時所使用的字型。

  • 設定印表機字型:指定列印時所使用的字型。

  • 鏡像顯示字型:如果您想要暫時取消目前指定的印表機字型選項,並且使用最接近目前螢幕字型的印表機字型,請開啟這個切換狀態。

SUPERPAD 類別

SUPERPAD 會從 CEditView 衍生它的檢視類別 CPadViewCPadView 會存取 CEditView 的屬性和作業,以便加入至本段說明所述的 CEditView 功能。

CPadView 會呼叫 CEditView::SetFontSetPrinterFont,來初始化及變更螢幕和印表機字型。

為了實作 [自動換行] 命令,CPadView 會建立一個新的編輯控制項 (它的 WNDCLASS 是標準的 Windows 編輯控制項) 來切換自動換行狀態。它會切換控制項的 ES_AUTOHSCROLLWS_HSCROLL 樣式,這兩個樣式可以判斷編輯控制項是否可以處理自動換行。CpadView 會儲存舊版編輯控制項的緩衝區,並且將它移動到新的編輯控制項中。最後,它會毀棄舊有的編輯控制項,然後藉由呼叫 CWnd::SubclassWindow,為新編輯控制項的 hWnd 和 CPadView 類別建立關聯。

CPadView 會覆寫 OnPrint,以加入頁面的頁首和頁尾。它會覆寫 OnBeginPrinting,來設定會選擇性顯示在頁首、頁尾或是兩者的目前時間,也會在編輯控制項的目前選取範圍啟動預覽列印。

CPadView 會覆寫 CView::OnScrollTo,將檢視捲動到上一次預覽列印時相同的檢視位置。

關鍵字

本範例會使用下列關鍵字:

AfxGetApp; AfxGetInstanceHandle; AfxMessageBox; AfxOleInit; CArchive::Flush; CArchive::GetFile; CArchive::IsStoring; CBitmap::CreateCompatibleBitmap; CButton::DrawItem; CCmdUI::SetCheck; CDC::Attach; CDC::CreateCompatibleDC; CDC::Detach; CDC::DrawIcon; CDC::FillRect; CDC::GetDeviceCaps; CDC::GetTextMetrics; CDC::IntersectClipRect; CDC::LPtoHIMETRIC; CDC::LineTo; CDC::MoveTo; CDC::Rectangle; CDC::RestoreDC; CDC::SaveDC; CDC::SelectObject; CDC::SetBkMode; CDC::SetWindowExt; CDC::SetWindowOrg; CDC::StretchBlt; CDC::TextOut; CDialog::Create; CDialog::DoModal; CDialog::OnInitDialog; CDocTemplate::SetServerInfo; CDocument::DeleteContents; CDocument::GetFirstViewPosition; CDocument::GetNextView; CEditView::GetEditCtrl; CEditView::GetPrinterFont; CEditView::PrintInsideRect; CEditView::SerializeRaw; CEditView::SetPrinterFont; CEditView::SetTabStops; CEditView::dwStyleDefault; CFile::Write; CFont::CreateFontIndirect; CFontDialog::DoModal; CFrameWnd::ActivateFrame; CFrameWnd::Create; CFrameWnd::LoadFrame; CGdiObject::CreateStockObject; CGdiObject::DeleteObject; CGdiObject::GetObject; CObject::AssertValid; CObject::Dump; CObject::IsKindOf; CObject::Serialize; COleIPFrameWnd::OnCreateControlBars; COleLinkingDoc::OnGetLinkedItem; COleResizeBar::Create; COleServerDoc::IsInPlaceActive; COleServerDoc::OnDeactivateUI; COleServerDoc::OnGetEmbeddedItem; COleServerDoc::UpdateAllItems; COleServerItem::CopyToClipboard; COleServerItem::GetDataSource; COleServerItem::GetDocument; COleServerItem::OnDraw; COleServerItem::OnGetExtent; COleServerItem::OnRenderFileData; COleServerItem::OnShow; COleServerItem::SetItemName; COleTemplateServer::ConnectTemplate; COleTemplateServer::UpdateRegistry; CPrintDialog::CreatePrinterDC; CPrintInfo::SetMaxPage; CRect::Height; CRect::InflateRect; CRect::IsRectEmpty; CRect::SetRect; CRect::Size; CRect::Width; CStatusBar::Create; CStatusBar::SetIndicators; CString::Find; CString::GetBuffer; CString::GetLength; CString::IsEmpty; CString::Left; CString::LoadString; CString::Mid; CString::ReleaseBuffer; CTime::Format; CToolBar::Create; CToolBar::LoadBitmap; CToolBar::SetButtons; CView::GetDocument; CView::OnBeginPrinting; CView::OnPrepareDC; CView::OnPrint; CWinApp::AddDocTemplate; CWinApp::EnableShellOpen; CWinApp::ExitInstance; CWinApp::GetProfileInt; CWinApp::GetProfileString; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWinApp::OnIdle; CWinApp::PreTranslateMessage; CWinApp::RegisterShellFileTypes; CWinApp::WriteProfileInt; CWinApp::WriteProfileString; CWnd::BringWindowToTop; CWnd::CenterWindow; CWnd::DestroyWindow; CWnd::Detach; CWnd::DoDataExchange; CWnd::FromHandle; CWnd::GetClientRect; CWnd::GetDC; CWnd::GetDlgCtrlID; CWnd::GetFocus; CWnd::GetFont; CWnd::GetParent; CWnd::GetParentFrame; CWnd::GetStyle; CWnd::GetSuperWndProcAddr; CWnd::GetWindowPlacement; CWnd::GetWindowRect; CWnd::GetWindowText; CWnd::GetWindowTextLength; CWnd::IsZoomed; CWnd::KillTimer; CWnd::OnClose; CWnd::OnCreate; CWnd::OnEraseBkgnd; CWnd::OnRButtonDown; CWnd::OnSize; CWnd::OnTimer; CWnd::PreCreateWindow; CWnd::ReleaseDC; CWnd::ScreenToClient; CWnd::SendMessage; CWnd::SetDlgCtrlID; CWnd::SetDlgItemText; CWnd::SetFocus; CWnd::SetFont; CWnd::SetOwner; CWnd::SetTimer; CWnd::SetWindowPlacement; CWnd::SetWindowPos; CWnd::SetWindowText; CWnd::ShowWindow; CWnd::SubclassDlgItem; CWnd::SubclassWindow; CWnd::UpdateWindow; CreateWindow; DragAcceptFiles; GetCurrentTime; GetObject; GetProfileInt; GetProfileString; GetStockObject; GetSystemMetrics; GlobalMemoryStatus; IsIconic; IsWindowVisible; LOWORD; LoadIcon; MulDiv; SetWindowLong; SetWindowPos; UpdateWindow; WideCharToMultiByte; WriteProfileString; _alloca; _getdrive; lstrcpyn; lstrlen; min; wcstombs; wsprintf

注意事項:

部分範例 (包括本範例) 尚未經過改寫,無法反映出目前在 Visual C++ 精靈、程式庫以及編譯器方面的變更,不過還是可以示範如何完成您要進行的工作。

請參閱

其他資源

MFC 範例