Поделиться через


Образец HIERSVR: демонстрация серверного приложения с перетаскиванием OLE

Обновлен: Ноябрь 2007

Образец HIERSVR служит примером серверного приложения визуального редактирования, которое поддерживает связанные объекты и редактирование объектов по месту их расположения. Кроме того, это приложение представляет "полнофункциональный" сервер и может непосредственно открывать и сохранять файлы. Объект HIERSVR представляет многоуровневую иерархическую схему, где каждый узел иерархии состоит из текста, окруженного прямоугольником или другими фигурами. Образец HIERSVR демонстрирует функции сервера, а также перетаскивание OLE и копирование в буфер обмена.

8c47csfz.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Этот образец кода служит для демонстрации основных принципов и не предназначен для использования в приложениях или на веб-узлах, поскольку не может считаться примером наиболее безопасного кода. Корпорация Майкрософт не несет ответственности за случайные или косвенные убытки в случае использования образца кода не по назначению.

Чтобы получить образцы и инструкции по их установке, выполните следующие действия.

  • В меню Справка среды Visual Studio выберите пункт Примеры.

    Дополнительные сведения см. в разделе Поиск файлов примеров.

  • Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.

  • Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.

Построение и запуск образца

Построение и запуск образца HIERSVR

  1. Откройте решение hiersvr.sln.

  2. В меню Построение выберите команду Построить.

  3. Запустите HIERSRV в виде изолированного приложения, чтобы оно зарегистрировалось в системе.

Схемы HIERSRV

В HIERSVR редактируются и отображаются документы или объекты, имеющие тип иерархической схемы с одиночным наследованием. Для каждого узла на схеме, за исключением корневого, существует только один родительский узел. Каждый родитель может иметь несколько потомков. Примером иерархической схемы являются организационная схема компании и список классов MFC, поскольку в них не используется множественное наследование C++. Файл Mfcclass.hie включен в качестве примера документа HIERSVR.

Каждый узел в иерархии обладает минимальным набором атрибутов.

  • Description — текст, состоящий из 30 или менее символов.

  • Shape — стиль прямоугольника, который окружает текст: прямоугольник, прямоугольник со скругленными углами или овальный прямоугольник.

  • Item Key Link (необязательно) — имя, используемое для ссылки на связанный элемент. Если этот атрибут не указан, по умолчанию используется строка описания. Это имя выводится, когда ссылка просматривается с помощью команды Edit Links в клиентском приложении.

Создание схемы HIERSVR

Новая диаграмма HIERSVR начинается с одного узла с текстом "Root node". Чтобы добавить узел, сначала выберите родительский узел, щелкнув его мышью. Затем выберите команду Add Node в меню Edit. В диалоговом окне Add Node укажите три атрибута, описанных выше. Чтобы изменить атрибуты узла, выберите его щелчком мыши, а затем выберите команду Change Node. Чтобы переместить узел, щелкните его и перетащите в новое расположение.

Образец HIERSVR выполнит импорт данных о иерархии из текстового файла, имеющего следующий формат: текст в каждой строке (отделяемой символом перевода строки) является значением атрибута Description для каждого узла. Число знаков табуляции перед текстом определяет уровень узла в иерархии. Файл Mfcclass.txt в каталоге образца HIERSVR является текстовым файлом импорта для схемы Mfcclass.hie, собственного файла HIERSVR.

Чтобы связать иерархическую схему с клиентским документом, сначала нужно сохранить файл в приложении HIERSVR. Затем выберите узел для копирования с помощью команды Edit Copy. Ссылка будет скопирована в буфер обмена. Текст выбранного узла также будет скопирован в буфер обмена в формате CF_TEXT, и вся иерархия узлов будет скопирована в собственном формате буфера обмена HIERSVR. Необходимо сохранить документ, поскольку для формата ссылки требуется наличие имени документа. Наконец, в клиентском приложении выберите команду Edit Paste Link (или команду Paste Link в меню Edit Paste Special). Ссылка появится в клиентском документе в виде узла, выбранного перед выполнением команды Edit Copy. Также будет показан прямоугольник.

Чтобы внедрить иерархическую схему в клиентский документ, можно использовать процедуру работы с буфером обмена, аналогичную показанной выше процедуре для связывания объекта, или выбрать команду Insert New Object в клиентском приложении. Если выбран вариант с буфером обмена, в клиентском приложении используйте команду Edit Paste, а не Edit Paste Link. В клиентский документ будет внедрена только вложенная иерархия, начинающаяся с выбранного узла.

Независимо от способа добавления схемы (связывание или внедрение) в окне клиентского приложения будет отображаться только верхний выбранный узел. Чтобы показать остальную часть схемы, необходимо запустить HIERSVR из клиентского приложения, дважды щелкнув верхний элемент.

Сервер визуального редактирования

В HIERSVR показано наследование классов, необходимое для реализации полнофункционального серверного приложения визуального редактирования, и приведены примеры наиболее распространенных пользовательских интерфейсов клиентского приложения, для которых необходим дополнительный код.

Далее показаны три класса платформы, использованные для реализации серверного приложения визуального редактирования.

  • Объект COleTemplateServer, хранящийся в переменной m_server, являющейся членом класса приложения HIERSVR.

  • Класс HIERSVR CServerDoc, производный от COleServerDoc.

  • Класс HIERSVR CServerItem, производный от COleServerItem.

  • Класс HIERSVR CInPlaceFrame, производный от класса COleIPFrameWnd, который вначале создается мастером приложений.

Ключевые слова

В этом образце показаны следующие ключевые слова:

AfxGetMainWnd; AfxMessageBox; AfxOleInit; AfxThrowMemoryException; AfxThrowNotSupportedException; AfxThrowResourceException; CArchive::Close; CCmdTarget::BeginWaitCursor; CCmdTarget::EndWaitCursor; CCmdUI::Enable; CCmdUI::SetCheck; CControlBar::EnableDocking; CControlBar::GetBarStyle; CControlBar::SetBarStyle; CDC::GetDeviceCaps; CDC::LPtoDP; CDC::LPtoHIMETRIC; CDC::SelectObject; CDC::SetMapMode; CDC::SetViewportExt; CDC::SetWindowExt; CDialog::DoModal; CDialog::OnInitDialog; CDocTemplate::SetServerInfo; CDocument::DeleteContents; CDocument::GetFirstViewPosition; CDocument::GetNextView; CDocument::OnNewDocument; CDocument::SetModifiedFlag; CDocument::UpdateAllViews; CFile::Open; CFileDialog::DoModal; CFileDialog::GetPathName; CFontDialog::DoModal; CFontDialog::GetColor; CFrameWnd::Create; CFrameWnd::DockControlBar; CFrameWnd::EnableDocking; CFrameWnd::LoadFrame; CMenu::GetSubMenu; CMenu::LoadMenu; CMenu::TrackPopupMenu; CObList::AddHead; CObList::AddTail; CObList::GetCount; CObList::GetHeadPosition; CObList::GetNext; CObList::GetTail; CObList::RemoveAll; CObList::RemoveAt; CObject::AssertValid; CObject::Dump; CObject::Serialize; COleDataObject::AttachClipboard; COleDataObject::GetFileData; COleDataObject::IsDataAvailable; COleIPFrameWnd::OnCreateControlBars; COleLinkingDoc::OnGetLinkedItem; COleServerDoc::GetItemPosition; COleServerDoc::IsInPlaceActive; COleServerDoc::OnDeactivateUI; COleServerDoc::OnGetEmbeddedItem; COleServerDoc::OnSetItemRects; COleServerDoc::RequestPositionChange; COleServerDoc::UpdateAllItems; COleServerItem::CopyToClipboard; COleServerItem::DoDragDrop; COleServerItem::GetClipboardData; COleServerItem::GetDataSource; COleServerItem::GetDocument; COleServerItem::GetItemName; COleServerItem::IsLinkedItem; COleServerItem::OnDraw; COleServerItem::OnGetClipboardData; COleServerItem::OnGetExtent; COleServerItem::OnOpen; COleServerItem::OnRenderFileData; COleServerItem::SetItemName; COleTemplateServer::ConnectTemplate; COleTemplateServer::UpdateRegistry; CPen::CreatePen; CRect::BottomRight; CRect::Height; CRect::InflateRect; CRect::IntersectRect; CRect::OffsetRect; CRect::PtInRect; CRect::Size; CRect::TopLeft; CScrollView::GetDeviceScrollPosition; CScrollView::ScrollToPosition; CScrollView::SetScrollSizes; CString::Empty; CString::GetLength; CString::IsEmpty; CToolBar::Create; CToolBar::LoadBitmap; CToolBar::SetButtons; CView::GetDocument; CView::OnDragEnter; CView::OnDragLeave; CView::OnDragOver; CView::OnDraw; CView::OnDrop; CView::OnInitialUpdate; CView::OnPrepareDC; CView::OnUpdate; CWinApp::AddDocTemplate; CWinApp::EnableShellOpen; CWinApp::ExitInstance; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWinApp::RegisterShellFileTypes; CWnd::ClientToScreen; CWnd::DoDataExchange; CWnd::GetClientRect; CWnd::GetParentFrame; CWnd::Invalidate; CWnd::InvalidateRect; CWnd::OnCreate; CWnd::OnKeyDown; CWnd::OnLButtonDblClk; CWnd::OnLButtonDown; CWnd::OnRButtonDown; CWnd::OnSize; CWnd::SetOwner; CWnd::ShowWindow; CWnd::UpdateWindow; CreateFontIndirect; DragAcceptFiles; EnableWindow; ExtTextOut; GetDeviceCaps; GetSysColor; GetTextExtent; GetWindowTextLength; IsChild; LPtoDP; LineTo; LoadBitmap; MoveTo; MulDiv; RGB; RectVisible; Rectangle; RegisterClipboardFormat; RoundRect; SelectObject; SetTextColor; SetViewportExt; SetWindowExt; SetWindowOrg; _alloca; afxMemDF; lstrcpy; memset; min; strnlen; wcstombs

8c47csfz.alert_note(ru-ru,VS.90).gifПримечание.

Некоторые образцы, включая данный, не модифицировались с учетом изменений в мастерах, библиотеках и компиляторе Visual C++, однако по-прежнему демонстрируют выполнение требуемой задачи.

См. также

Другие ресурсы

Примеры MFC