Partager via


HIERSVR, exemple : illustre une application serveur avec glisser-déplacer OLE

Mise à jour : novembre 2007

HIERSVR est un exemple d'application serveur d'édition visuelle qui prend en charge les objets liés comme les objets modifiés sur place. En outre, en tant que serveur à part entière, cette application peut également ouvrir et enregistrer directement des fichiers. L'objet HIERSVR est un schéma hiérarchique à plusieurs niveaux, dans lequel chaque nœud se compose de texte entouré d'un rectangle ou de toute autre forme. HIERSVR n'illustre pas seulement les fonctionnalités serveur ; il montre également l'utilisation du glisser-déplacer OLE et la copie vers le Presse-papiers.

Note de sécurité :

Cet exemple de code est fourni pour illustrer un concept et ne doit pas être utilisé dans des applications ou des sites Web, car il peut ne pas illustrer les pratiques de programmation les plus sûres. Microsoft n'assume aucune responsabilité pour tout dommage indirect ou consécutif en cas d'utilisation de l'exemple de code à des fins autres que celles prévues.

Pour obtenir des exemples et des instructions d'installation :

  • Dans le menu ? (Aide) de Visual Studio, cliquez sur Exemples.

    Pour plus d'informations, consultez Recherche des fichiers d'exemple.

  • La liste la plus récente et la plus complète d'exemples est disponible en ligne à partir de la page Visual Studio 2008 Samples.

  • Des exemples sont également disponibles sur le disque dur de votre ordinateur. Des exemples et un fichier Readme sont copiés par défaut dans un dossier sous \Program Files\Visual Studio 9.0\Samples\. Pour les éditions Express de Visual Studio, tous les exemples sont accessibles en ligne.

Génération et exécution de l'exemple

Pour générer et exécuter l'exemple HIERSVR

  1. Ouvrez la solution hiersvr.sln.

  2. Dans le menu Générer, cliquez sur Générer.

  3. Exécutez HIERSRV en tant qu'application autonome pour lui permettre de s'inscrire dans le système.

Schémas HIERSRV

HIERSVR modifie et affiche un seul type de document ou d'objet : le schéma de la hiérarchie d'héritage. Chaque nœud du schéma, à l'exception du nœud racine, a un nœud parent unique. Chaque parent peut avoir plusieurs enfants. L'organigramme d'une société est un exemple de schéma hiérarchique. Il en va de même pour la liste des classes MFC, car ces classes n'utilisent pas l'héritage multiple C++. Mfcclass.hie est fourni comme exemple de document HIERSVR.

Chaque nœud de la hiérarchie possède un ensemble d'attributs minimal.

  • Description — texte composé de 30 caractères maximum.

  • Shape — style du rectangle qui entoure le rectangle du texte : rectangle à coins arrondis ou rectangle ovale.

  • Item Key Link (facultatif) — nom faisant référence à un élément lié. En l'absence de spécification, le Item Key Link correspond par défaut à la chaîne de description. Ce nom est visible lorsque vous affichez le lien à l'aide de la commande Modifier les liens dans l'application cliente.

Création d'un schéma HIERSVR

Un nouveau schéma HIERSVR commence par un nœud unique présentant le texte "Nœud racine". Pour ajouter un nœud, commencez par sélectionner son nœud parent en cliquant dessus. Dans le menu Edit, cliquez ensuite sur Add Node. Dans la boîte de dialogue Add Node, spécifiez les trois attributs décrits plus haut. Pour changer les attributs d'un nœud, sélectionnez ce dernier en cliquant dessus, puis cliquez sur Change Node. Pour déplacer un nœud, cliquez dessus et faites-le glisser jusqu'au nouvel emplacement.

HIERSVR va importer les informations hiérarchiques à partir d'un fichier texte mis en forme de la façon suivante : le texte contenu dans chaque ligne (délimité par un saut de ligne) correspond à la description du nœud. Le nombre de tabulations précédant le texte définit le niveau du nœud dans la hiérarchie. Dans le répertoire de l'exemple HIERSVR, Mfcclass.txt est le fichier d'importation de texte pour Mfcclass.hie, fichier natif de HIERSVR.

Pour lier un organigramme à un document client, vous devez d'abord enregistrer le fichier dans HIERSVR. Sélectionnez ensuite le nœud à copier à l'aide de Edit Copy. Le lien est copié dans le Presse-papiers. Le texte du nœud sélectionné est également copié dans le Presse-papiers au format CF_TEXT et l'ensemble de la hiérarchie des nœuds est copié dans un format Presse-papiers issu de HIERSVR. Il est nécessaire d'enregistrer le document, parce que le format du lien exige un nom de document. Enfin, dans l'application cliente, cliquez sur Édition Coller avec liaison (ou cliquez sur Coller avec liaison dans le menu Édition Collage spécial). Le lien s'affiche dans le document client à la place du nœud que vous avez sélectionné avant de cliquer sur Édition Copier. Le rectangle s'affiche également.

Pour incorporer un organigramme dans un document client, vous pouvez soit utiliser une procédure faisant appel au Presse-papiers, comme celle qui est utilisée plus haut pour lier l'objet, soit cliquer sur Insérer un objet dans l'application cliente. Si vous choisissez la procédure du Presse-papiers, utilisez plutôt Édition Coller, de préférence à Édition Coller avec liaison dans l'application cliente. Seule la sous-hiérarchie ayant pour point de départ le nœud sélectionné sera incorporée dans le document client.

Que vous choisissiez de lier ou d'incorporer le schéma, seul le nœud le plus haut placé que vous sélectionnez s'affiche dans la fenêtre de l'application cliente. Pour voir le reste du schéma, vous devez lancer HIERSVR à partir de l'application cliente en double-cliquant sur l'élément.

Serveur d'édition visuelle

HIERSVR illustre les dérivations de classes nécessaires pour implémenter une application serveur d'édition visuelle entièrement fonctionnelle, de même que quelques-unes des interfaces utilisateur d'applications clientes les plus courantes qui exigent l'utilisation de code supplémentaire.

Les trois classes d'infrastructure utilisées pour implémenter une application serveur d'édition visuelle sont illustrées par les éléments suivants :

  • un objet COleTemplateServer, stocké en tant que variable membre m_server dans la classe d'application de HIERSVR ;

  • la classe CServerDoc de HIERSVR, dérivée de COleServerDoc ;

  • la classe CServerItem de HIERSVR, dérivée de COleServerItem ;

  • la classe CInPlaceFrame de HIERSVR, dérivée de COleIPFrameWnd, créée à l'origine par l'Assistant Application.

Mots clés

Cet exemple illustre l'utilisation des mots clés suivants :

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

Remarque :

Certains exemples, tels que celui-ci, n'ont pas été modifiés pour refléter les changements apportés aux Assistants, aux bibliothèques et au compilateur Visual C++, mais ils illustrent bien l'exécution de la tâche souhaitée.

Voir aussi

Autres ressources

Exemples MFC