Образец SUPERPAD: демонстрация сервера визуального редактирования, который редактирует текст с помощью CEditView
Обновлен: Ноябрь 2007
В образце SUPERPAD показано, как использовать класс CEditView в сочетании со средствами поддержки сервера визуального редактирования.
Примечание о безопасности. |
---|
Этот образец кода служит для демонстрации основных принципов и не предназначен для использования в приложениях или на веб-узлах, поскольку не может считаться примером наиболее безопасного кода. Корпорация Майкрософт не несет ответственности за случайные или косвенные убытки в случае использования образца кода не по назначению. |
Чтобы получить образцы и инструкции по их установке, выполните следующие действия.
В меню Справка среды Visual Studio выберите пункт Примеры.
Дополнительные сведения см. в разделе Поиск файлов примеров.
Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.
Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.
Построение и запуск образца
Построение и запуск образца SUPERPAD
Откройте решение superpad.sln.
В меню Построение выберите команду Построить.
Для использования приложения SUPERPAD в качестве сервера визуального редактирования запустите его в виде изолированного приложения, чтобы оно зарегистрировалось в системе.
Во время первого запуска приложение SUPERPAD выводит окно-заставку, которое выглядит аналогично диалоговому окну "О программе". Это диалоговое окно некоторое время остается на экране, а потом исчезает после истечения интервала ожидания. Чтобы закрыть окно-заставку, нажмите любую клавишу или щелкните мышью.
Приложение SUPERPAD запоминает расположение окна с момента последнего запуска. Оно также запоминает, было ли окно документа развернуто во фрейме окна MDI.
Дополнительные возможности SUPERPAD
В SUPERPAD показаны дополнительные варианты использования CEditView путем наследования классов, в том числе включение и выключение переноса по словам в элементе управления "Поле ввода" и изменение шрифта для экрана и для принтера. В приложении SUPERPAD также показано широкое разнообразие приемов программирования MFC.
Диалоговое окно "О программе", где показано использование системных ресурсов.
Окно-заставка, которое выводится при первом запуске приложения.
Постоянное размещение окна, реализуемое путем сохранения данных о расположении окна в закрытом INI-файле.
Обработка пустых циклов.
Использование курсора ожидания.
Создание подкласса для окна.
Добавление колонтитулов страницы в ходе печати.
Разрывы страниц в ходе печати.
Запуск предварительного просмотра печати для выделенного фрагмента документа.
Возвращение из предварительного просмотра печати в прежнюю позицию в документе.
Стандартное диалоговое окно шрифтов (CFontDialog).
Меню SUPERPAD
В меню File находятся стандартные команды — New, Open, Close, Save, Save As, Print, Print Preview, Print Setup, список последних файлов и команда Exit.
В меню File также находится пункт Page Setup, с помощью которого можно задать верхний и нижний колонтитулы для каждой страницы. Если не нужно использовать колонтитулы, оставьте соответствующие поля пустыми. В колонтитулах можно указывать любой текст. Также можно указать любые из следующих кодов форматирования.
&f обозначает имя файла.
&p обозначает номер страницы.
Любые коды форматирования, определенны в функции времени выполнения C strftime. Например, %a обозначает краткое наименование дня недели, %B задает полное название месяца, %d обозначает число в пределах месяца, а %Y — год с указанием века. Эти параметры форматирования недоступны, если связать SUPERPAD в версией DLL библиотеки MFC, поскольку функция strftime недоступна в библиотеке DLL.
В приложении SUPERPAD доступны следующие команды меню Edit, которые по умолчанию обрабатываются классом: CEditView: Cut, Copy, Page, Delete, Find. Find Next, Replace, Select All и Undo. В меню Edit также находится команда Word Wrap, позволяющая включить или выключить перенос по словам.
В меню View находятся следующие команды, которые используются различные возможности класса CEditView.
Set Tab Stops — введите в диалоговое окно целое число, задающее количество позиций табуляций, расположенных на равном расстоянии друг от друга.
Set Font — укажите шрифт, используемый для отображения файла на экране.
Set Printer Font — укажите шрифт, используемый для печати.
Mirror Display Font — включите этот выключатель, чтобы временно отменить выбор шрифта для печати и вместо него использовать шрифт принтера, лучше всего соответствующий шрифту экрана.
Классы SUPERPAD
В SUPERPAD используется класс представления CPadView, производный от CEditView. Класс CPadView получает доступ к атрибутам и операциям класса CEditView, чтобы расширить функциональные возможности CEditView, как описано здесь.
CPadView вызывает методы CEditView::SetFont и SetPrinterFont для инициализации и изменения шрифтов экрана и принтера.
Для реализации команды Edit Word Wrap класс CPadView переключает состояние переноса по словам, создавая новый элемент управления "Поле ввода" (в котором в качестве WNDCLASS используется стандартный элемент управления Windows "Поле ввода"). Он переключает стили ES_AUTOHSCROLL и WS_HSCROLL элемента управления, которые в совокупности определяют, выполняется ли перенос по словам в элементе управления "Поле ввода". CPadView сохраняет буфер старого элемента управления "Поле ввода" и перемещает его в новый элемент управления "Поле ввода". Наконец, он уничтожает старый элемент управления "Поле ввода", а затем сопоставляет поле hWnd нового элемента управления "Поле ввода" с классом CPadView, вызывая метод CWnd::SubclassWindow.
В классе 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++, однако по-прежнему демонстрируют выполнение требуемой задачи. |