Silverlight를 설치하려면 여기를 클릭합니다.*
Korea 대한민국변경|Microsoft 전체 사이트
MSDN
|개발자 센터
MSDN Home   MSDN Home
MSDN 홈 > MSDN Magazine > 2003년 기사 > .NET 사용자 지정 클라이언트에서 대화형의 Visio 드로잉 표면 호스트

OFFICE 2003 .NET 사용자 지정 클라이언트에서 대화형의 Visio 드로잉 표면 호스트

Mai-lan Tomsen Bukovec and Blair Shaw

본 문서는 C#에 익숙한 사용자를 대상으로 작성되었습니다.
난이도 1 2 3
이 문서에 사용된 코드 다운로드: Visio2003.exe? (325KB)
요약 Microsoft Office Visio 2003은 사용자가 자신의 응용 프로그램의 사용자 인터페이스에 대화형의 드로잉 표면을 포함시킬 수 있는 새로운 드로잉 구성 요소를 도입하였습니다. 호스트 응용 프로그램에서 발생하는 이벤트나 웹 서비스 및 ADO.NET 데이터 어댑터의 데이터를 사용하여 Visio 드로잉 구성 요소를 실행시킬 수 있습니다. Visio 드로잉 구성 요소는 사용자가 드로잉 표면에서 그래픽을 사용하고 표시하는 방법을 제어할 수 있는 다양한 기능의 Visio 응용 프로그램 프로그래밍 모델을 지원합니다. 본 문서에서는 Fabrikam 2.0 웹 서비스에서 데이터를 검색하는 C# 기반의 Windows Forms 클라이언트에 Visio 드로잉 구성 요소를 포함시키는 방법에 대해 설명합니다.

프로그래밍이 가능한 그래픽을 실제 업무용 응용 프로그램에 통합하면 사용자에게 친숙한 인터페이스를 구성할 수 있지만 상당한 개발 시간과 그래픽 전문 기술이 필요합니다. Microsoft Office Visio 2003에서 사용할 수 있는 Visio 드로잉 구성 요소를 사용하면 Visio 자동화를 통해 다양한 다이어그램 작성 기능을 활용할 수 있습니다. Visio 구성 요소는 Office 문서에서 Visual Studio .NET에서 만든 사용자 지정 응용 프로그램까지 다양한 컨테이너에 포함시킬 수 있기 때문에 다양하게 활용될 수 있습니다. 이 문서에서는 사용자가 그래픽을 조작할 수 있도록 Microsoft .NET 기반 클라이언트 응용 프로그램에서 Visio 드로잉 구성 요소를 실행하는 방법을 설명합니다.

드로잉 구성 요소의 기본 개념
??Visio 드로잉 구성 요소는 본질적으로 기본 Visio 라이브러리에 대한 ActiveX 래퍼입니다. 다른 ActiveX 구성 요소와 같이 이 구성 요소는 Visual Studio .NET 2003, Office 2003 컨테이너(예: Microsoft Word), Microsoft Internet Explorer 5.5 이상 및 기타 ActiveX 구성 요소 컨테이너를 사용하여 개발된 사용자 지정 호스트 응용 프로그램에 포함될 수 있습니다. 이 구성 요소는 ActiveX 아키텍처를 사용하지만 웹 사이트 등에서 얻을 수 있는 일반적인 ActiveX 컨트롤보다 포함 성능이 뛰어난 응용 프로그램 구성 요소입니다. Visio 구성 요소는 간단한 하위 기능 집합을 제공하는 데 그치지 않고 Visio 응용 프로그램의 전체 기능을 제공합니다. Visio 컨트롤은 두 가지 면에서 Visio 클라이언트 응용 프로그램과 다릅니다. 먼저 드로잉 컨트롤은 SDI(단일 문서 인터페이스) 창만 지원합니다. 컨트롤 아키텍처는 단일 창에 단일 드로잉을 지원합니다. 즉, Visio의 모든 MDI(다중 문서 인터페이스)는 컨트롤 컨텍스트에서 비활성화됩니다. Visio 구성 요소는 ShapeSheet 창이나 아이콘 편집기 창에 대한 액세스를 허용하지 않습니다(그래도 사용자는 ShapeSheet에 대해서는 프로그램을 작성할 수 있습니다). 두 번째로 드로잉 컨트롤은 VBA(Visual Basic for Applications)를 로드하거나 VBA 코드를 실행할 수 없습니다. 따라서 기존의 VBA 코드는 응용 프로그램 코드를 호스트하도록 포팅되어야 합니다. 또한 컨트롤에서 Visio 문서를 열 때 Visio 매크로 경고 대화 상자가 표시되지 않습니다.
??Microsoft Office Visio 2003 릴리스의 Visio 구성 요소는 사용자의 응용 프로그램에 프로그램 가능 그래픽을 통합하기 위해 다음과 같은 다양한 새로운 옵션을 제공합니다.
  • "라이브" 상태의 Visio 조직도를 Word 문서에 포함된 Visio 구성 요소에 표시하고 Word 2002 또는 Word 2003 문서 자체의 이벤트에 따라 자동으로 업데이트할 수 있습니다.
  • SharePoint 웹 파트 내에 Visio 구성 요소를 포함시키고 Microsoft Project Server 웹 서버 또는 다른 SharePoint 웹 파트에서 실행되는 시간 표시 드로잉을 표시할 수 있습니다.
  • Visio 비즈니스 처리 다이어그램을 사용자 지정 Visual Studio .NET 컨테이너나 Word 스마트 문서에 포함시키고 워크플로에서 변경되는 상태를 업데이트할 수 있습니다.

??이 구성 요소는 Visio 응용 프로그램 엔진을 하나의 구성 요소로 다시 패키지화한 것이기 때문에 Visio 컨트롤은 Visio 응용 프로그램 설치 프로그램으로 설치되며, Visio 클라이언트 응용 프로그램을 사용하여 초기화해야 합니다. 사용자가 시스템에 Visio 클라이언트 응용 프로그램을 설치하지 않으면 호스트 컨테이너에서 컨트롤이 초기화되지 않습니다. 이 이벤트는 Micrisoft Office Visio 2003이 설치되었는지 확인하기 위해 레지스트리를 검사하여 초기화 시에 호스트 응용 프로그램에서 쉽게 해결할 수 있습니다. 올바른 버전의 Visio가 설치되어 있으면 사용자에게 다양한 기능의 그래픽 사용자 인터페이스를 제공할 수 있습니다. 그렇지 않으면 그래픽적으로 덜 뛰어난 사용자 환경으로 다운그레이드해야 합니다.
??이 구성 요소는 두 가지 방식으로 배포할 수 있습니다. Visio 2003을 자신의 시스템에 설치하거나(Visio 2002와 함께 설치 가능) 응용 프로그램 사용자가 Visio 설치 프로그램의 최소 설치 옵션으로 Visio 구성 요소를 설치하도록 할 수 있습니다. 자신의 응용 프로그램을 설치하기 전에 Visio 설치를 연결하고 INSTALLLEVEL을 40으로 설정하여 Windows Installer 응용 프로그램이 Visio를 자동으로 설치하도록 구성할 수 있습니다. 이러한 방식으로 사용자가 응용 프로그램을 설치할 때 Visio 설치 UI가 표시되지 않도록 구성할 수 있습니다.

Visio 구성 요소 API
??드로잉 구성 요소에는 전체 Visio 프로그래밍 모델을 사용할 수 있도록 도와주는 Document 및 Window의 두 가지 속성이 포함된 씬(thin) API가 있습니다. Visio 구성 요소의 속성 및 사용 방법에 대한 자세한 내용은 그림 1?을 참조하십시오.
?? 추가 프로그래밍 없이 Visio 구성 요소를 자신의 호스트 컨테이너에 포함시키면 응용 프로그램의 사용자 인터페이스 컨텍스트 내에서 사용자에게 Visio 드로잉 표면을 제공할 수 있습니다. 그림 2는 관련 코드가 전혀 없는 Windws Form에 포함된 컨트롤의 모습을 보여줍니다.

Figure 2 Visio Control
그림 2 Visio 컨트롤

??추가 프로그래밍이 없어도 Visio 구성 요소는 다양한 범위의 기능을 제공합니다. 이러한 기능에는 Visio 페이지의 페이지 탭, 스크롤 막대, 눈금자, 배경 모눈선과 같은 시각적인 효과도 포함됩니다. 사용자는 또한 Window.ShowRuler 및 Window.ShowTab과 같은 Visio 속성을 사용하여 사용자의 편의에 따라 단순한 흰색 배경을 생성하기 위해 이러한 효과를 사용하지 않을 수도 있습니다.
??셰이프 및 페이지에서 오른쪽 단추 메뉴를 사용할 수 있지만 Visio 응용 프로그램의 다른 도구 모음이나 메뉴는 사용할 수 없습니다. 사용자는 Visio 사용자 인터페이스를 프로그래밍 방식으로 사용할 수도 있지만, 대신 드로잉 구성 요소에 대한 이벤트를 따라 자신의 사용자 지정 응용 프로그램의 사용자 인터페이스를 사용하는 것이 좋습니다.
?? 또한 현재의 Visio 응용 프로그램 설정에 액세스할 수 있습니다. Visio 페이지의 배경색은 기본 파란색이 아닌 녹색입니다. 본 예제에서는 응용 프로그램의 배경을 녹색으로 설정하였습니다. 드로잉 구성 요소의 HostID 속성을 변경하면( 그림 1?에서 HostID에 대한 설명 참조) 구성 요소로 실행되는 Visio에 대한 레지스트리 항목이 개별적으로 생성됩니다. 따라서 HostID 속성을 디자인 모드에서 "MyNamespace.SampleApp"로 변경하면 컨트롤의 배경색이 기본 파란색으로 전환됩니다. 그런 다음 Visio 기반 응용 프로그램을 실행하면 페이지 배경이 녹색으로 표시됩니다. 본 문서에서 Visio 구성 요소가 포함된 폼을 실행하면 페이지 배경이 기본 파란색으로 계속 유지됩니다(문서 후반에는 배경색을 프로그래밍 방식으로 변경하는 내용이 설명됩니다).
?? 마지막으로 스텐실 창이 없습니다. 사용자는 Visio 자동화를 사용하여 컨트롤에 녹색의 스텐실 창을 표시하여 사용자가 드로잉 페이지로 셰이프를 끌어다 놓을 수 있게 할 수 있습니다. 컨트롤 컨텍스트에서는 셰이프가 Windows Forms의 도구 모음에 표시되거나 Space Plan 응용 프로그램의 데이터 또는 이벤트에 따라 Visio 도면에 동적으로 제공되도록 하는 것이 더 좋을 수 있습니다.
?? Visio 구성 요소는 호스트 응용 프로그램에서 Visio 개체 모델 및 이벤트를 사용하거나 웹 서비스 또는 데이터베이스의 데이터를 사용하여 구성 요소를 실행하면 더 많은 기능을 제공합니다. Visio 개체 모델은 강력하고 확장성이 뛰어납니다. 조직도와 데이터베이스 마법사와 같이 제품에 함께 제공되는 모든 Visio 솔루션은 Visio 자동화 계층을 사용합니다. Visio 구성 요소의 프로그래밍 자동화 중 상당 부분은 Visio 개체 모델을 사용하여 발생합니다. 이러한 개체 모델에 대한 내용은 MSDN 및 제품 도움말에 자세하게 설명되어 있습니다.
??Visio 구성 요소는 전체 Visio 개체 모델을 노출하기 때문에 구성 요소 프로그래머는 샘플 코드, 자습서, 기술 문서, Visio Software Development Kit 및 Visio 자동화 참조 등을 제공하는 MSDN 내의 Visio 웹 사이트를 비롯하여 기존의 개발자 자료를 참조 자료로 활용할 수 있습니다.

실제 환경에서 사용되는 Visio 구성 요소
??Visio 구성 요소 프로그래밍에 대한 주요 요소를 설명하기 위해 본 문서에서는 Space Plan 예제 응용 프로그램의 일부 샘플 코드를 예로 들어 설명할 것입니다. 전체 응용 프로그램은 본 문서의 상단에 있는 링크를 통해 다운로드할 수 있으며 이 프로그램을 사용하려면 .NET Framework 버전 1.1과 Visio 2003이 있어야 합니다. 예제 응용 프로그램은 Visio 개체 모델을 사용하기 위해 Visio 구성 요소 API를 사용하는 방법과 구성 요소에서 드로잉 작성을 시작하도록 Space Plan 예제 응용 프로그램에서 이벤트를 발생시키는 방법 및 Space Plan 예제 응용 프로그램을 구동하도록 드로잉 구성 요소에서 이벤트를 포착하는 방법을 설명하기 위해 만들어졌습니다. 또한 Visio 구성 요소를 컨트롤 컨텍스트에서 저장하는 방법에 대해서도 설명됩니다. 그 외 예제 응용 프로그램 코드에서 정확하게 설명되지 않은 컨트롤의 다른 일부 특성에 대해서 설명됩니다.

Figure 3 Space Plan
그림 3 Space Plan

?? 그림 3에서 볼 수 있듯이 Space Plan 예제 응용 프로그램은 funiture costing 예제 폼, 제품 정보 폼 및 예제 응용 프로그램에 가구 카탈로그를 제공하기 위해 사용되는 Fabrikam Web Service 2.0(MSDN에서 다운로드하여 로컬로 설치된 웹 서비스)으로 구성됩니다.
??잠시 Space Plan에 대한 고객 시나리오를 살펴보시기 바랍니다. 관리 직원은 일반적으로 가구나 기타 사무 용품 구매 업무를 처리합니다. 관리 직원은 회의실용 가구를 주문하는 작업을 완료하기 위해 인쇄된 카탈로그나 온라인 카탈로그에서 제품을 검토하고, Microsoft Excel을 사용하여 예산 관련 작업을 수행하고 다시 Word나 Excel을 사용하여 구매 주문서를 작성할 것입니다. 그리고 줄자 등을 이용해서 회의실이나 가구의 치수 등을 측정할 것입니다.

Figure 4 Space Plan Sample App
그림 4 Space Plan 예제 응용 프로그램

?? 여기에서 작성한 Space Plan 예제 응용 프로그램은 이러한 모든 작업을 단일 C# 기반 Windows Forms 응용 프로그램으로 통합하여 이러한 과정을 간단하게 해줍니다(그림 4). 이를 통해 사용자는 구매 주문서를 작성할 때 가구 옵션을 검토하고, 가구를 선택 및 배열하고 구매 항목별로 작성할 수 있습니다.

응용 프로그램 작성
?? 예제 응용 프로그램을 실행할 때 처음으로 수행해야 하는 작업은 Fabrikam 웹 서비스에 대한 비동기 호출을 수행하는 것입니다. 웹 서비스에 연결할 수 없는 경우에는 로컬 캐시에 저장된 데이터를 사용할 수도 있습니다. DataGrid에는 가구 카탈로그에서 사용할 수 있는 가구에 대한 소매 및 도매 가격 등의 세부 정보가 표시됩니다.
??쉽게 이해할 수 있도록 여기에서는 DataGrid에서 서로 다른 가구를 나타내는 가구 단추를 세 개만 구현했습니다. 단추의 모양으로는 해당 가구를 나타내는 Visio 셰이프의 비트맵 이미지를 사용했습니다. 사용자가 가구 단추를 클릭하면 몇 가지 일이 발생합니다. 그림 5와 같이 빈 Visio 도면에 해당 가구 셰이프가 표시되고 사용자는 원하는 대로 셰이프를 배열할 수 있습니다. 구성 요소 드로잉에서 가구는 회의실 크기에 따라 배율이 조정되어 있기 때문에 사용자는 공간에 맞는 적정 숫자의 가구를 선택할 수 있습니다.

Figure 5 Furniture Costing Form
그림 5 Furniture Costing 폼

?? 셰이프 추가 및 삭제 이벤트가 발생하면 소매 및 도매 가격의 현재 합계도 그에 따라 조정됩니다. 또한 DataGrid의 Quantity 열도 Visio 구성 요소에 있는 셰이프 수에 따라 조정됩니다.
?? Visio 구성 요소 프로그래밍을 시작하려면 Visual Studio .NET 도구 상자에 Visio 드로잉 컨트롤을 추가하여 Visio 11.0 형식 라이브러리 및 Visio 11.0 드로잉 구성 요소 형식 라이브러리에 참조를 추가합니다. 이 문서의 C# 예제와 같이 관리되는 코드 응용 프로그램을 개발하는 경우에는 Visio PIA(기본 상호 운용성 어셈블리) 네임스페이스를 선언해야 합니다. 이 PIA를 통해 관리 코드 응용 프로그램은 Visio의 관리하지 않는 형식 라이브러리에 액세스할 수 있습니다.
using Visio =   
    Microsoft.Office.Interop.Visio;
using VisOcx = 
    Microsoft.Office.Interop.VisOcx;

?? 이 문서의 C# 응용 프로그램에서 Visio 개체를 액세스하려면, C#이 강력한 형식이기 때문에 Visio 응용 프로그램 개체로 캐스팅된 Visio 구성 요소의 Window 및 Document 속성을 사용합니다.
VisWindow = (Visio.Window) 
    axDrawingControl1.Window;

?? 여기에서는 Visio Window 개체를 사용하여 ShowRulers, ShowPageTabs, ShowScrollBars 및 ShowGrid 속성을 False로 설정하여 Visio 구성 요소가 흰색 사각형으로 표시되도록 구성할 수 있습니다. 여기에서는 또한 Window의 Zoom 속성 값을 1.00(실물 크기)으로 설정하여 빈 흰색 페이지가 창에 완전히 표시되도록 설정합니다. Visio 구성 요소 자체는 드로잉이 컨트롤 창에 맞게 표시되도록 크기를 조정할 수 있는 확대/축소 속성을 하나 갖고 있습니다. 하지만 Visio 기반 응용 프로그램에는 이보다 더 뛰어난 방식으로 드로잉 표면을 미세하게 확대/축소할 수 있는 기능이 있습니다. 여기에는 사용자가 수정한 부분에 대해 창의 확대/축소를 잠글 수 있는 기능도 포함됩니다.

이벤트를 사용하여 Visio 도면에 셰이프 추가
?? Visio 구성 요소를 사용하면 이벤트를 통해 드로잉 표면과 호스트 응용 프로그램을 통합할 수 있습니다. Visio 구성 요소의 Windows Form 추가(또는 삭제) 시에 단추 클릭 이벤트가 어떻게 작동하는지 살펴보시기 바랍니다.
?? 이 예제 응용 프로그램에서는 먼저 Visio 드로잉 표면에서 셰이프를 어디에 표시할지 정의합니다. 여기에서는 ShapeLocation이라는 배열 구조를 사용하여 세 개의 각 셰이프에 대한 PinX 및 PinY 값을 저장합니다. ShapeLocation은 두 개의 동일 요소(X와 Y)만 포함된 간단한 구조로 되어 있습니다. 다른 드로잉 응용 프로그램과 같이 Visio도 2차원을 기준으로 합니다. 셰이프의 위치는 본질적으로 수평 및 수직 위치(꼭지점)로 구성됩니다. 셰이프는 셰이프의 핀(회전 중심)에 따라 위치가 정해집니다. 이러한 핀은 셰이프의 상위 요소 즉, 페이지나 그룹에 대한 상대적인 X와 Y의 좌표로 이뤄집니다. 이러한 좌표는 Visio 페이지에서 셰이프를 배치하는 위치를 정확하게 표현합니다. 각 ShapeLocation 구조는 셰이프의 위치에 대한 X 및 Y 좌표를 정의합니다. 사용자가 폼에서 셰이프 단추를 누를 때 창에 해당 셰이프를 적절히 배치할 수 있도록 이러한 구조를 활용해야 합니다.

Figure 6 Chair Coordinates on a Page in Visio
그림 6 Visio 페이지의 의자 좌표

?? 여기에서는 Visio의 기본 측정 단위인 인치를 사용하여 배열에 ShapeLocation 구조체의 값을 입력합니다. 원점(0, 0)은 Visio 페이지의 왼쪽 하단 모서리에 있습니다. 그림 6에는 X와 Y 좌표 값을 가진 OfficeChair 셰이프 형식의 구조체가 들어 있습니다.
ShapeLocations[(int)ShapeType.OfficeChair].X = .6495;
ShapeLocations[(int)ShapeType.OfficeChair].Y = 2.4271;

?? 이러한 좌표는 페이지의 왼쪽 아래 모서리에 있는 원점(0, 0)에서 가장 가까운 위치로 매핑됩니다. 그림 6에서는 Visio에서 좌표가 사용되는 예를 보여주기 위해 X 축과 Y 축을 추가했습니다.
??셰이프 위치를 정의한 다음에는 폼의 단추 클릭 이벤트 처리기의 일부로 화면에 배치할 Visio 마스터 셰이프에 대한 참조를 얻을 수 있습니다. 마스터 셰이프는 단일 셰이프, 여러 셰이프, 셰이프 그룹 또는 스텐실에 저장된 다른 응용 프로그램(비트맵 이미지)에서 가져온 개체일 수 있습니다. 페이지에 마스터 셰이프를 가져다 놓으면 해당 셰이프의 인스턴스가 생성되어 마스터 셰이프의 모든 속성 및 동작이 상속됩니다.
?? 예제 응용 프로그램에는 가구에 대한 세 개의 마스터 셰이프가 포함된 Space Plan.vss라는 Visio 스텐실이 포함되어 있습니다. 마스터 셰이프를 액세스하려면 먼저 Visio OpenEx 메서드를 사용하여 스텐실을 열어야 합니다. 그림 5는 Page 개체에서 Drop 메서드를 사용하여 Visio 드로잉 표면에 셰이프를 가져다 놓는 방법을 보여줍니다. 다음 Drop 메서드의 인수는 ShapeLocation 구조에서 정의한 X 및 Y 좌표와 마스터 셰이프(visMaster)를 지정합니다.
visShape = VisPage.Drop( visMaster, ShapeLocations[shapetype].X, 
   ShapeLocations[shapetype].Y);

?? 사용자가 단추 중 하나를 한 번 이상 누를 때 셰이프가 서로 겹치지 않게 해야 합니다. 셰이프가 서로 겹치지 않게 하기 위해 여기에서는 이후의 셰이프를 ShapeLocation 구조체의 PinX 및 PinY 값보다 .1250인치만큼 떨어져서 페이지에 표시되도록 설정했습니다.

호스트 응용 프로그램에서 Visio 이벤트 사용
??지금까지 폼 이벤트가 Visio 구성 요소에 셰이프를 추가하는 방법에 대해 살펴보았습니다. 이제는 호스트 응용 프로그램에서 이러한 Visio 이벤트를 어떻게 사용하는지 살펴보겠습니다. 이 예제에서 Visio 이벤트는 호스트 응용 프로그램에서 두 개의 작업을 발생시킵니다. 첫 번째 작업은 셰이프가 Visio 드로잉 표면에 추가될 때 소매 및 도매 가격 카운터를 업데이트하고, 두 번째 작업은 셰이프의 클릭 이벤트가 발생할 때 사용자 지정 Windows Form을 표시합니다.
?? 이 예제에서는 Visio AddAdvise 메서드를 사용하여 만든 이벤트 개체의 알림을 처리하기 위해 이벤트 싱크에서 Visio 이벤트 프로시저 인터페이스인 IVisEventProc를 구현했습니다. 이 메서드는 Visio 이벤트 처리 성능이 IDispatch보다 뛰어납니다. 먼저 그림 7?의 코드 단편과 같이 새로운 이벤트 목록을 만들고 Visio AddAdvise 메서드를 호출하여 ShapeAdded 이벤트를 추가합니다.
??이 예제 응용 프로그램에서는 Visio ShapeAdded 및 ShapeDeleted 이벤트를 사용하여 소매 및 도매 카운터의 값을 증가 및 감소시킵니다. 여기에서는 이 이벤트 코드(Visio 자동화 참조 설명서 참조)를 사용하여 IVisEventProc 구현에서 이벤트를 처리하는 방법을 결정합니다. 그림 8?은 ShapeAdded 이벤트, NoEventsPending 이벤트 및 ShapeDeleted 이벤트를 처리하기 위해 IVisEventProc 인터페이스를 구현한 방법을 보여줍니다. 그림 9?는 IVisEventProc 인터페이스를 통해 알림을 수신했을 때 이러한 이벤트 중 하나를 처리하는 방법을 설명합니다.
??Visio 드로잉 표면에 가구 셰이프를 추가한 다음 사용자는 마우스나 키보드를 사용하여 가구를 원하는 위치로 이동할 수 있습니다. 런타임 모드의 기능을 확장하도록 Visio 드로잉 표면을 잠그기 위해 여기에서는 단순히 모든 Visio 마우스 및 키 입력 이벤트를 도중에 차단하여 없앴습니다. Visio 구성 요소에서 사용자 인터페이스로부터 어떤 이벤트도 수신하지 않는다면, 사용자는 드로잉을 호스트 응용 프로그램의 사용자 인터페이스를 통해서 오직 구동될 수만 있는 읽기 전용으로만 사용할 수 있습니다.
?? 이 예제 응용 프로그램에서는 사용자가 드로잉 표면에서 셰이프를 마우스 오른쪽 단추로 클릭하면 사용자 지정 폼이 표시되도록 했습니다(그림 10 참조).

Figure 10 Custom Form
그림 10 사용자 지정 폼

?? 마우스 및 키 입력 이벤트는 셰이프가 아닌 Visio Document 또는 Window 개체에서 발생합니다. Click 이벤트가 발생하는 실제 셰이프를 찾으려면 Visio SpatialSearch 속성을 사용해야 합니다. 그림 6과 같이 SpatialSearch는 문서 또는 페이지에서 발생한 Click 이벤트에 대해 X 및 Y 좌표를 가져오고 다른 셰이프 내에 해당 셰이프를 포함할 수 있는지 여부를 나타내는 상수, 오차 허용치(Click 이벤트에 대해 검색할 영역이기 때문에 일반적으로 매우 작은 수) 및 셰이프를 앞에서 뒤의 순서로 저장할지를 나타내는 플래그를 가져옵니다. 속성은 Click 이벤트에 해당하는 셰이프가 포함된 Selection 개체를 반환합니다.
Selection visSelection = visioPage.get_SpatialSearch(x, y, 
    (short) VisSpatialRelationCodes.visSpatialContainedIn, 
    tolerance,(short) VisSpatialRelationFlags.visSpatialFrontToBack);

?? 사용자 지정 Windows Form을 제대로 표시하려면 Visio 좌표(왼쪽 아래 모서리의 원점)를 Windows 좌표 시스템(오른쪽 위 모서리의 원점)으로 변환하는 간단한 보조 루틴을 호출해야 합니다. 이렇게 하면 올바른 비율을 사용하여 클릭되는 셰이프의 오른쪽으로 폼 위치를 지정할 수 있습니다.
??이 응용 프로그램에서 Product Detail 폼에 표시된 사용자 지정 속성은 호스트 응용 프로그램의 Fabrikam 데이터 집합에 저장됩니다. 셰이프 자체는 FabrikamProductID라는 하나의 사용자 지정 속성을 저장합니다. 마우스 클릭 이벤트가 발생하면 Visio 구성 요소는 캐시에 저장된 데이터 집합인 FabrikamProductID와 제품의 메타파일 이미지를 Product Detail 폼의 사용자 지정 생성자로 전달합니다. 그러면 Product Detail 폼은 Fabrikam 레코드의 데이터로 채워집니다. (이 폼은 또한 Visio 자동화를 통해 생성되는 Visio 셰이프의 메타파일을 표시합니다.) 사용자는 셰이프 또는 문서에 사용자 정의 XML 데이터 아일랜드를 만드는 각 셰이프의 사용자 지정 속성이나 SolutionXML을 사용하여 Visio 셰이프에 데이터를 저장할 수 있습니다. 하지만 Visio 구성 요소를 사용할 때는 데이터 조작을 호스트 응용 프로그램에 모두 통합시키고 드로잉 표면만 사용하여 이벤트에 응답하거나 이벤트를 발생시키는 것이 좋습니다.
??그 결과 호스트 응용 프로그램의 사용자 인터페이스와 효율적으로 통합될 수 있는 사용자 지정 속성 폼을 만들었습니다. 여기에서는 컨텍스트 메뉴를 통해 액세스 가능한 표준 Visio 사용자 지정 속성 대화 상자를 사용할 수도 있지만 이 경우 Visio 대화 상자의 모양을 변경할 수 없는 단점이 있습니다. 이 예제의 Space Plan 응용 프로그램에서는 어떤 Visio 사용자 인터페이스나 도구 모음도 표시하지 않습니다. Visio 셰이프에 제공되는 기본 컨텍스트 메뉴를 해제하고 이 예제의 사용자 지정 Product Detail 폼으로 대체했습니다. (예제 응용 프로그램의 컨텍스트에서 표준 대화 상자의 모양을 사용자가 확인할 수 있도록 이 예제에서는 Visio에서 페이지의 컨텍스트 메뉴를 계속 사용할 수 있도록 설정해 두었습니다.)
??Visio 구성 요소를 사용할 때 가장 좋은 방법은 Visio 이벤트를 가로채서 자신의 사용자 지정 사용자 인터페이스를 표시하는 것입니다. 이렇게 하면 Visio 구성 요소를 자신의 응용 프로그램과 더욱 효율적으로 통합할 수 있습니다. 이 예제에서는 드로잉 구성 요소에 NegotiateToolbars 및 NegotiateMenus 속성을 제공합니다. 이 두 개의 속성을 True로 설정하면 응용 프로그램의 CommandBar 개체 또는 UI 개체를 사용하여 드로잉 구성 요소에 Visio 도구 모음 및 메뉴를 표시할 수 있습니다. 하지만 메뉴와 도구 모음의 병합 작업은 호스트 컨테이너에 따라 까다로울 수 있습니다.
??OLE 2.0 메뉴 병합을 지원하는 컨테이너의 경우에만 메뉴와 도구 모음을 병합할 수 있습니다. 컨테이너에서 이를 지원하지 않는 경우에는(예: Visual Studio .NET Windows From 편집기) IOleCommandTarget을 사용하여 IOleCommandTarget 인터페이스를 통해 Visio 명령을 실행할 수 있습니다. 단일 응용 프로그램에서 다중 컨트롤 인스턴스를 사용할 경우에는 특히 메뉴와 도구 모음 병합이 어려울 수 있습니다. 단일 응용 프로그램에서 Visio 컨트롤을 여러 번 포함시킬 수 있지만 인스턴스는 단일 기본 Visio 응용 프로그램 개체를 공유합니다. 따라서 여러 활성 컨트롤 인스턴스를 통해 메뉴 병합을 수행할 경우 예기치 못한 동작이 발생할 수 있습니다.
?? UI에서 기존 Visio 메뉴를 반드시 사용해야 하는 경우에는 MSDN의 Visio 개발자 센터에서 Visio 구성 요소 프로그래머를 위한 기술 문서를 찾아 보십시오. 샘플 코드 및 구현 지침 등에 대한 자세한 정보를 얻을 수 있습니다. 일반적으로 Visio 사용자 인터페이스를 사용자 자신의 인터페이스로 바꾸는 것이 훨씬 좋은 방법입니다. 본 문서의 Space Plan 응용 프로그램에 사용된 간단한 사용자 인터페이스는 응용 프로그램 전체에서 일관된 사용자 인터페이스 요소를 사용하고 있기 때문에 프로그램 외관상 조화로운 모습을 제공합니다.
??사용자는 Visio 프로그래밍 모델을 모두 사용할 수 있기 때문에 자신의 호스트 응용 프로그램의 메뉴를 통해 Visio 기능을 구동할 수 있습니다. 예를 들어 본 예제의 호스트 응용 프로그램에서 File 메뉴는 New, Open 및 Save의 세 가지 옵션을 제공합니다. New 항목은 기존 빈 Visio 드로잉을 로드하도록 SRC 속성을 명시적으로 설정하여 Visio 구성 요소에서 기존에 열려 있는 드로잉을 다시 설정합니다. 사용자는 Open 메서드를 사용하여 Visio 구성 요소에서 기존 Visio 드로잉을 열 수 있습니다. 여기에서 SRC는 파일 자체가 아닌 파일 사본을 로드합니다. 따라서 Visio의 SaveAs 메서드를 사용하지 않으면 실제 파일에 변경 사항을 저장할 수 없습니다.
??컨트롤이 다시 초기화되면 SRC 속성에서 파일을 다시 로드하고 이전에 드로잉에 변경된 사항을 모두 지웁니다. 변경된 문서를 스트림상에 계속 유지하려면 SRC 속성을 기존 파일로 초기화한 다음 빈 문자열로 SRC 속성을 다시 설정합니다. 그런 다음 다른 사용자가 해당 컨트롤을 사용하면 문서의 인 스트림(in-stream) 버전에서 변경된 점을 확인할 수 있습니다. 따라서 사용자가 SaveAs 메서드를 사용하지 않으면 메모리 상의 문서가 디스크에 저장되지 않습니다.
??본 문서의 예제 응용 프로그램에서는 File | Save 메뉴 항목에 대해 SaveAs 메서드를 사용하고 옵션을 필터링하여 Visio 응용 프로그램에서 사용할 수 있는 전체 옵션 범위 대신 Visio 드로잉 및 템플릿 확장(그림 11?참조)으로 파일을 저장하기 위해 옵션을 필터링합니다.
??New 메뉴 항목의 경우에는 새로운 드로잉으로서 빈 드로잉을 로드하기 위해 SRC 속성을 설정했습니다. 새로 초기화된 문서 개체를 시작하려면 이 방법 밖에 다른 방법이 없습니다. 다음 코드는 창에서 모든 기존 셰이프를 선택하고 삭제하는 방법을 보여줍니다.
VisWindow.SelectAll();
VisWindow.Delete();
ZeroQty();

?? 사용자는 이를 통해 드로잉에 사용자 지정 스타일이나 서식을 사용할 수 있지만, 이 경우 기존 Document 개체를 계속 사용해야 합니다. 여기에서는 응용 프로그램에서 컨트롤이 처음으로 초기화될 때 빈 문서를 로드하도록 SRC 속성을 빈 문자열로 설정했습니다. SRC 속성을 빈 문자열로 다시 설정해도 드로잉 표면의 내용은 삭제되지 않는 것에 주의하십시오. 이 내용은 구성 요소에서 변경된 모든 사항과 함께 메모리 내 원본 SRC 문서의 사본으로 보관됩니다. Visio 드로잉 표면을 다시 설정하기 위해 사용자는 드로잉의 모든 셰이프 삭제, 구성 요소에 대한 동적 제거 및 재생성 또는 기존의 빈 드로잉 로드 중에서 원하는 옵션을 선택할 수 있습니다.

결론
??앞에서 설명한 바와 같이 Visio 구성 요소를 사용하면 프로그램 가능 그래픽을 사용자 인터페이스에 쉽게 통합할 수 있습니다. Space Plan 응용 프로그램에서는 드로잉 표면을 사용하여 가구 구매 주문서에 셰이프를 그래픽으로 표시할 수 있었습니다. 이를 통해 사용자는 확장된 드로잉 표면에서 가구 이미지를 다시 배열하고 드로잉 표면에서 선택한 가구의 가격과 수량을 확인할 수 있었습니다.
?? Visio 구성 요소는 Visio 자동화 모델 전체를 제공하기 때문에 호스트 응용 프로그램에서 발생한 이벤트를 처리하고 호스트 응용 프로그램에 대해 이벤트를 발생시킬 수 있는 다양한 기능이 지원됩니다. 사용자는 사용자 지정 컨테이너 및 응용 프로그램 컨테이너의 이벤트뿐만 아니라 데이터로부터 Visio 드로잉 구성 요소를 구동할 수 있습니다. 또한 사용자는 호스트 응용 프로그램의 사용자 인터페이스 컨텍스트에서 작업 진행 중에 Visio 구성 요소를 사용할 수 있습니다.
?? Visio 드로잉 구성 요소는 Visio 자동화를 기반으로 호스트 응용 프로그램을 구축할 수 있는 기능을 제공하므로 개발자는 복잡한 그래픽 응용 프로그램을 구현하는 대신 직관적인 그래픽 인터페이스를 활용할 수 있습니다.


참고할 관련 문서:
Microsoft Office Visio 2003 ActiveX 컨트롤을 사용한 프로그래밍?
Microsoft SharePoint 제품 및 기술과 Microsoft Office Visio 2003 통합?

Mai-lan Tomsen Bukovec은 Micrisoft Visio 담당 Lead Program Manager입니다. Bukovec은 Microsoft Systems Journal 및 Microsoft Internet Developer의 기사를 기술했으며 Addison Wesley Longman 및 Cambridge University Press 출판사에서 기술 비즈니스 관리자를 위한 두 권의 책을 저술하였습니다.

Blair Shaw 는 Microsoft 파트너 업체를 위한 응용 프로그램 개발 고문으로 근무 중입니다. Shaw는 지난 6년 동안 Visio를 포함한 다양한 Microsoft 제품 그룹과 ISV와 관련된 업무를 수행했습니다. Shaw의 전자 메일은 blairsh@microsoft.com입니다.

MSDN Magazine?2003년 12월호?에서 발췌
이 잡지를 지역 배부처에서 직접 구매하시거나 구독?을 신청하십시오.


화면 맨 위로화면 맨 위로

최종수정일: 2004년 6월 11일
Top of Page Top of Page


Microsoft