SUPERPAD 示例:演示使用 CEditView 编辑文本的可视化编辑服务器
更新:2007 年 11 月
SUPERPAD 示例阐释如何将 CEditView 类与可视化编辑服务器支持一起使用。
安全说明: |
---|
提供该示例代码是为了阐释一个概念,并不代表着最安全的编码实践,因此不应在应用程序或网站中使用该示例代码。对于超出本示例代码的预期用途以外的使用所造成的偶然或继发性损失,Microsoft 不承担任何责任。 |
获取示例和安装示例的说明:
在 Visual Studio 的“帮助”菜单上,单击“示例”。
有关更多信息,请参见定位示例文件。
示例的最新版本和完整列表可以从 Visual Studio 2008 Samples page(Visual Studio 2008 示例页面)联机获取。
还可以在计算机的硬盘上查找示例。默认情况下,示例和自述文件将复制到 \Program Files\Visual Studio 9.0\Samples\ 下的文件夹中。对于 Visual Studio 速成版,所有示例都位于联机位置。
生成并运行示例
生成并运行 SUPERPAD 示例
打开解决方案 superpad.sln。
在“生成”菜单中单击“生成”。
若要使用 SUPERPAD 作为可视化编辑服务器,将其作为独立的应用程序运行一次,以便它可以向系统注册其自身。
在第一次运行 SUPERPAD 时,它显示看起来像“关于”对话框的启动画面窗口。此对话框暂时停留在屏幕上并在超时后消失。若要关闭该启动画面窗口,按任意键或单击鼠标。
SUPERPAD 记住您上一次运行它的窗口位置。它还记住文档窗口在 MDI 框架窗口中是否被最大化。
附加 SUPERPAD 功能
SUPERPAD 阐释通过类派生的 CEditView 的高级使用,包括切换编辑控件的自动换行状态和更改屏幕和打印机字体。SUPERPAD 还阐释多种 MFC 编程技巧。
显示系统资源使用状况的“About”(关于)对话框。
当应用程序第一次启动时显示的启动画面窗口。
通过在 private .ini 文件中存储窗口位置信息获得的持久性的窗口位置。
空闲循环处理。
使用等待光标。
对窗口进行子分类。
在打印期间添加页眉和页脚。
打印期间分页。
从文档中的当前所选内容开始打印预览。
从打印预览返回到文档中上一次预览的同一位置。
标准字体对话框 (CFontDialog)。
SUPERPAD 菜单
“File”(文件)菜单提供标准命令:New(新建)、“Open”(打开)、“Close”(关闭)、“Save”(保存)、“Save As”(另存为)、“Print”(打印)、“Print Preview”(打印预览)、“Print Setup”(打印设置)、最近使用的 (MRU) 文件列表和 Exit(退出)。
“File”(文件)菜单还提供“Page Setup”(页面设置)选项,您可以使用该选项指定每页的页眉和/或页脚。如果不需要它们则将页眉和页脚保留为空白。可以指定页眉和页脚中的任何文本。还可以指定以下任何格式设置代码。
&f 表示文件名。
&p 表示页码。
为 C 运行时 strftime 函数定义的任何格式设置代码。例如,%a 表示缩写的工作日名称,%B 表示完整的月份名称,%d 表示月中的第几天,%Y 表示带可以指定的纪元的年份。如果将 SUPERPAD 链接到 MFC 的 DLL 版本,则这些格式设置选项将不可用,因为在 DLL 中 strftime 不可用。
SUPERPAD 提供下列默认由 CEditView 处理的**“编辑”菜单命令:“剪切”、“复制”、“分页”、“删除”和“查找”**。“Find Next”(查找下一个)、“Replace”(替换)、“Select All”(全选)及“Undo”(撤消)。“Edit”(编辑)菜单还提供“Word Wrap”(自动换行)命令来启用和禁用自动换行。
“View”(视图)菜单提供以下命令,练习 CEditView 的不同功能:
“Set Tab Stops”(设置制表位)— 在对话框输入单个整数来用于均匀分布的制表位。
“Set Font”(设置字体)— 指定在屏幕上显示文件时要使用的字体。
“Set Printer Font”(设置打印机字体)— 指定打印时要使用的字体。
“Mirror Display Font”(镜像显示字体)— 如果您想要暂时撤消选择当前指定的打印机字体,而改用最匹配屏幕字体的打印机字体,则可打开此切换状态。
SUPERPAD 类
SUPERPAD 从 CEditView 派生其视图类 CPadView。CPadView 访问要添加到 CEditView 的功能的 CEditView 的属性和操作,如下文介绍。
CPadView 调用 CEditView::SetFont 和 SetPrinterFont 以初始化和更改屏幕和打印机字体。
为实现“Edit”(编辑)->“Word Wrap”(自动换行)命令,CPadView 通过创建新的编辑控件 (Edit Control)(其 WNDCLASS 是标准 Windows 编辑控件)切换自动换行的状态。它切换控件的 ES_AUTOHSCROLL 和 WS_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++ 向导、库和编译器中所做的更改,但仍演示了如何完成所需的任务。 |