다음을 통해 공유


HIERSVR 샘플: OLE 끌어서 놓기를 사용하는 서버 응용 프로그램 설명

업데이트: 2007년 11월

HIERSVR 샘플은 내부에서 편집된 개체뿐만 아니라 연결된 개체를 지원하는 비주얼 편집 서버 응용 프로그램 예제입니다. 또한 "풀" 서버로서 이 응용 프로그램은 파일을 직접 열고 저장할 수도 있습니다. HIERSVR 개체는 다단계 계층 구조 다이어그램이며, 계층의 각 노드는 사각형 또는 다른 모양으로 둘러싸인 텍스트로 구성됩니다. 서버 기능을 보여 주는 것 외에도 HIERSVR는 OLE 끌어서 놓기 및 클립보드에 복사 등을 보여 줍니다.

보안 정보:

이 샘플 코드는 개념을 보여 주기 위해 제공되며 가장 안전한 코드 작성 방법을 제시하지 않을 수 있으므로 응용 프로그램이나 웹 사이트에서 사용할 수 없습니다. Microsoft는 샘플 코드를 원래 용도 이외의 다른 용도로 사용하는 경우 발생하는 부수적이나 파생적인 손해에 대해 책임을 지지 않습니다.

샘플 및 이를 설치하기 위한 지침을 가져오려면

  • Visual Studio의 도움말 메뉴에서 샘플을 클릭합니다.

    자세한 내용은 샘플 파일 찾기를 참조하십시오.

  • 최신 버전 및 전체 샘플 목록은 Visual Studio 2008 Samples 페이지에서 온라인으로 사용할 수 있습니다.

  • 컴퓨터의 하드 디스크에서도 샘플을 찾을 수 있습니다. 기본적으로 샘플과 추가 정보 파일은 \Program Files\Visual Studio 9.0\Samples\ 아래의 폴더에 복사됩니다. Visual Studio Express Edition의 경우에는 모든 샘플이 온라인에 있습니다.

샘플 빌드 및 실행

HIERSVR 샘플을 빌드하고 실행하려면

  1. hiersvr.sln 솔루션을 엽니다.

  2. 빌드 메뉴에서 빌드를 클릭합니다.

  3. 시스템에 HIERSRV 자체를 등록할 수 있도록 HIERSRV를 독립 실행형 응용 프로그램으로 실행합니다.

HIERSRV 다이어그램

HIERSVR에서 편집하고 표시하는 문서 및 개체의 형식은 단일 상속 계층 구조 다이어그램입니다. 루트 노드를 제외하고 다이어그램의 각 노드에는 부모 노드가 하나만 있으며, 각 부모는 여러 개의 자식을 가질 수 있습니다. 계층 구조 다이어그램의 한 예로 회사의 조직도를 들 수 있습니다. MFC 클래스는 C++ 다중 상속을 사용하지 않으므로 MFC 클래스 목록도 계층 구조 다이어그램의 예가 될 수 있습니다. Mfcclass.hie는 HIERSVR 문서 예제로 포함됩니다.

계층의 모든 노드에는 최소 특성 집합이 있습니다.

  • 설명 — 최대 30자로 구성되는 텍스트

  • 모양 — 텍스트 사각형, 모퉁이가 둥근 사각형 또는 타원형 사각형을 둘러싸는 사각형 스타일

  • 항목 키 연결(선택적 요소) — 연결된 항목을 참조하는 데 사용되는 이름. 이 특성을 지정하지 않으면 항목 키 연결은 기본적으로 설명 문자열로 지정됩니다. 클라이언트 응용 프로그램에서 Edit Links 명령을 사용하여 연결을 볼 때 이 이름이 표시됩니다.

HIERSVR 다이어그램 만들기

새 HIERSVR 다이어그램은 "Root node"라는 텍스트가 지정된 단일 노드로 시작합니다. 노드를 추가하려면 먼저 부모 노드를 클릭하여 선택합니다. 그런 다음 Edit 메뉴에서 Add Node를 클릭합니다. Add Node 대화 상자에서 위에 설명된 세 가지 특성을 지정합니다. 노드 특성을 변경하려면 마우스로 해당 특성을 클릭하여 선택한 다음 Change Node를 클릭합니다. 노드를 이동하려면 해당 노드를 클릭하여 새 위치로 끌어 놓습니다.

HIERSVR는 줄 바꿈으로 구분된 각 줄의 텍스트가 노드 설명인 텍스트 파일에서 계층 정보를 가져옵니다. 텍스트 앞의 탭 문자 수는 계층에서 노드의 수준을 결정합니다. HIERSVR 샘플 디렉터리에서 Mfcclass.txt는 네이티브 HIERSVR 파일인 Mfcclass.hie의 텍스트 가져오기 파일입니다.

계층 구조 다이어그램을 클라이언트 문서에 연결하려면 먼저 HIERSVR에서 파일을 저장한 다음 Edit Copy를 사용하여 복사할 노드를 선택합니다. 그러면 클립보드에 연결이 복사됩니다. 또한 선택한 노드의 텍스트도 CF_TEXT 형식으로 클립보드에 복사되고, 전체 노드 계층이 HIERSVR 네이티브 클립보드 형식으로 복사됩니다. 연결 형식에는 문서 이름이 필요하므로 문서를 저장해야 합니다. 마지막으로 클라이언트 응용 프로그램에서 Edit Paste Link를 클릭하거나 Edit Paste Special 메뉴에서 Paste Link를 클릭합니다. 연결은 Edit Copy를 클릭하기 전에 선택한 노드로서 클라이언트 문서에 표시됩니다. 사각형도 표시됩니다.

클라이언트 문서에 계층 구조 다이어그램을 포함하려면 위에서 설명한 개체 연결과 비슷한 클립보드 프로시저를 사용하거나, 클라이언트 응용 프로그램에서 Insert New Object를 클릭합니다. 클립보드 프로시저를 선택하는 경우에는 클라이언트 응용 프로그램에서 Edit Paste Link 대신 Edit Paste를 사용하십시오. 선택한 노드에서 시작하는 하위 계층만 클라이언트 문서에 포함됩니다.

다이어그램을 연결하는지 아니면 포함하는지에 상관없이 선택한 최상위 노드만 클라이언트 응용 프로그램 창에 표시됩니다. 나머지 다이어그램을 보려면 항목을 두 번 클릭하여 클라이언트 응용 프로그램에서 HIERSVR를 시작해야 합니다.

비주얼 편집 서버

HIERSVR는 모든 기능을 갖춘 비주얼 편집 서버 응용 프로그램을 구현하는 데 필요한 클래스 파생 및 추가 노드를 필요로 하는 가장 일반적인 클라이언트 응용 프로그램 사용자 인터페이스 일부를 보여 줍니다.

비주얼 편집 서버 응용 프로그램을 구현하는 데 사용되는 세 가지 프레임워크 클래스는 다음에 의해 설명됩니다.

  • HIERSVR의 응용 프로그램 클래스에서 m_server 멤버 변수로 저장된 COleTemplateServer 개체

  • COleServerDoc에서 파생된 HIERSVR CServerDoc 클래스

  • COleServerItem에서 파생된 HIERSVR CServerItem 클래스

  • 응용 프로그램 마법사에서 만든 COleIPFrameWnd에서 파생된 HIERSVR CInPlaceFrame 클래스

키워드

이 샘플에서는 다음의 키워드를 보여 줍니다.

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

참고:

이 샘플을 비롯한 일부 샘플은 Visual C++ 마법사, 라이브러리 및 컴파일러의 변경 내용을 반영하도록 수정되지 않았지만 해당 작업의 수행 방법을 보여 줍니다.

참고 항목

기타 리소스

MFC 샘플