<4D F736F F D20C1A4BAB8B0FAC7D0C8B85F FC7CFB0E85F446F63>

Similar documents
MVVM 패턴의 이해

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

슬라이드 1

슬라이드 1

서현수

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Windows Live Hotmail Custom Domains Korea

<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F32C2F7BDC32E >

Dialog Box 실행파일을 Web에 포함시키는 방법

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

Microsoft Word - [2017SMA][T8]OOPT_Stage_2040 ver2.docx

PowerPoint 프레젠테이션

슬라이드 1

PowerPoint Presentation

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

歯k"

국어부록표지

_....

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

본문

PowerPoint Presentation

Windows 8에서 BioStar 1 설치하기

PCServerMgmt7

제8장 자바 GUI 프로그래밍 II

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

Chapter_06

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

DLL(Dynamic Linked Library)

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

PowerPoint Presentation

Chapter_02-3_NativeApp

HTML5* Web Development to the next level HTML5 ~= HTML + CSS + JS API

슬라이드 1

gnu-lee-oop-kor-lec06-3-chap7

<4D F736F F F696E74202D20C1A C0E520B5B5C5A5B8D5C6AE20C6C4C0CF20C0D4C3E2B7C220B9D720B4D9BEE7C7D120BAE420C5ACB7A1BDBA2E BC8A3C8AF20B8F0B5E55D>

SproutCore에 홀딱 반했습니다.


슬라이드 1

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - CSharp-10-예외처리

PowerPoint Presentation

04_오픈지엘API.key

Microsoft PowerPoint - 07-Data Manipulation.pptx

<BABBB9AE2DC7D5C3BC2E687770>

Open GL

P2WW HNZ0

Visual C++의 개요

Motor Control Solution

Corporate PPT Template

윈도우 프로그래밍의 개념

Microsoft Word - src.doc

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

이장에서다룰내용 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2

AMP는 어떻게 빠른 성능을 내나.key

유니티 변수-함수.key

슬라이드 1

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

PowerPoint 프레젠테이션

PowerPoint Presentation

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

윈도우시스템프로그래밍

PowerPoint Presentation

슬라이드 1

ecorp-프로젝트제안서작성실무(양식3)

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft PowerPoint - chap01-C언어개요.pptx

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

슬라이드 1

Flex Builder 2 & 차트

Microsoft PowerPoint - 권장 사양

2 단계 : 추상화 class 오리 { class 청둥오리 extends 오리 { class 물오리 extends 오리 { 청둥오리 mallardduck = new 청둥오리 (); 물오리 redheadduck = new 물오리 (); mallardduck.swim();

IP 심화 라우팅프로토콜적용시 라우팅테이블에서 이니셜이있는네트워크를설정하는것 : onnected 직접연결된네트워크를의미한다. 그러므로라우팅은 나는이런네트워크와연결되어있다. 를직접연결된라우터들에게알려주는것 1>en 1#conf t 1(config)#router rip 1

Microsoft Word - Armjtag_문서1.doc

13 주차 - MDI, Exception, WebBrowser, RichTextBox, AlarmProgram 대림대학 년도 1 학기홍명덕

4장기본프로그래밍2

UDP Flooding Attack 공격과 방어

슬라이드 1


Google Maps Android API v2

JVM 메모리구조

Microsoft PowerPoint - 06-Body Data Class.pptx

Network Programming

소프트웨어공학 Tutorial #2: StarUML Eun Man Choi

단국대학교멀티미디어공학그래픽스프로그래밍중간고사 (2011 년봄학기 ) 2011 년 4 월 26 일학과학번이름 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤

PowerPoint 프레젠테이션

Interstage5 SOAP서비스 설정 가이드

Microsoft PowerPoint - Java7.pptx

1. 도구개요 STAF Testing 소개 각테스트대상분산환경에데몬을사용하여테스트대상프로그램을통해테스트를수행하고, 통합하며자동화하는 프레임워크 주요기능 테스트통합및자동화 카테고리 Testing 세부카테고리테스트설계및실행 커버리지 Test Integration / Aut

Microsoft PowerPoint - Windows CE Programming_2008 [호환 모드]

Microsoft PowerPoint 자동설치시스템검증-V05-Baul.pptx

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx

슬라이드 1

VISLAB 박제강 1. 시작하기전에영상관련알고리즘을개발하는과정에서작성한프로그램을테스트하고피드백하는작업은빈번하게발생한다. 이때기존콘솔 (Console) 형태로작성된프로그램의경우테스트작업을유동적으로조절할수없기때문에작업의효율이떨어진다. 반면 GUI(Graphical Use

Transcription:

WPF 의상호운용성렌더링문제를해결하기위한라이브러리 김태경 O, 전현상, 유혁 고려대학교컴퓨터학과 건국대학교전자공학과 고려대학교컴퓨터학과 tkkim@os.korea.ac.kr, ijava21@gmail.com, hxy@os.korea.ac.kr Library to solve rendering problem of WPF interoperability Tae-Kyung Kim O, Hyun-Sang Jeon, Chuck Yoo Dept. of Computer Science, Korea University Dept. of Electronic Engineering, KonKuk University Dept. of Computer Science, Korea University 요약 Microsoft의.NET Framework 버전 3.0 부터는 WPF(Windows Presentation Foundation) 라는기능을통해다양한시각효과를 Widows의어플리케이션에서제공할수있도록도와준다. 그리고 WPF에서는 WPF에서제공하는기본컨트롤이외에기존에사용하던컨트롤들을사용할수있도록해주기위해상호운용성 (interoperability) 라는기능을제공해준다. 하지만상호운용성을이용할경우 WPF의효과적인렌더링기능을사용하지못하고이전기술의렌더링기술을사용하게되어다양한시각효과의제공을할수없게된다는한계점이있다. 본논문에서는상호운용성을사용할경우생기는렌더링문제를해결하고상호운용성을쉽고효율적으로사용할수있는라이브러리를제안한다. 1. 서론 RIA, UX 등의개념으로화려한, 편리한 UI 의제공은소프트웨어개발시매우중요한요소가되었다. 그러한시대의변화에발맞추어 Microsoft.Net Framework 3.0 부터는 Windows Vista 의화면을표시하기위한프레임워크의일부로 WPF 라는부분을아래의그림 1. 과같이포함시켰다. Windows Presentation Foundation(WPF) 은 Windows Vista 에서컴퓨터의기능을최대한활용하면서응용프로그램 UI, 문서및미디어콘텐츠를통합하여응용프로그램과고급환경을작성하는데사용할수있는 Microsoft 의기술이다.[1] 그림 1. Microsoft.NET Framework 3.5 그리고 Microsoft 는개발자에게 UI 의개발을쉽게할수있는환경을제공하자는목표를갖고 WPF 의 SDK 를출시하였다. 덕분에 WPF 에서제공하는애니메이션, 비하인드코드, 데이터바인딩등의개념들은개발자에게편안한환경을제공할수있었다. WPF는강력한어플리케이션개발환경을제공한다. 하지만 WPF는아직도개발중인프레임워크이기때문에새롭고기존기술들이갖고있던장점들을모두흡수할수는없었다. 그래서많은개발자들은 WPF 기반의사용자인터페이스를만들어도기존기술의장점들은계속살리길원했다. 예를들어, 현재 WPF 3.0의표준컨트롤에서는윈폼의 DateTimePicker와같은많은컨트롤들이빠져있다. 그러한부분을지원해주기위해서 Microsoft에서는 WPF의상호운용성이라는부분을고려하여개발하였다.[2] 아래그림 2에서의 interop라는부분이 WPF의상호운용성 (interoperability) 에대한부분이다. 하지만근본적으로 WPF 이전방식의 GDI/GDI+ 를사용하는렌더링방식과 WPF의 DirectX를사용하는렌더링방식의차이로인하여상호운용성을사용할경우에는 WPF의장점인다양한그래픽, 애니메이션의적용이불가능하게된다.[3] 그리하여본논문에서는이러한문제를해결할수있는구조를제시하고쉽게개발에사용할수있는라이브러리를구현한다.

2.2 렌더링모델의차이점으로인하여생기는문제점 그림 2. Widows Presentation Foundation Architecture(1) 2. WPF 의상호운용성의한계점 2.1 기존 Win32 렌더링모델과 WPF 렌더링모델의차이점 WPF에서의모든디스플레이는 DirectX 엔진을통해수행되므로효율적인하드웨어및소프트웨어렌더링을허용한다. WPF는 milcore를통해 DirectX와의긴밀한협업을한다.[4] 아래그림은 WPF 주요구성요소의모습을나타내기위해 Microsoft에서제공하는 WPF의구조도이다. WPF Application 안에서상호운용성을통해 WPF 이전의컨트롤들이동작을하더라도 GDI 로렌더링되는영역과 WPF 로렌더링되는영역은완벽하게분리된다. 따라서 GDI 로렌더링되는영역에는크게 2 가지의문제가발생한다. 첫번째는 WPF 만이가능한 Skew, Scale, Transfrom, Opacity 등의효과들을적용할수없는문제이다. 아래의 XAML 마크업은파란색을갖는 Canvas 의인스턴스가젤하위에있고, 그위영역을핑크색을갖는캔버스의인스턴스와.NET 3.5 의 WebBrowser 클래스의인스턴스에 Opacity 프로퍼티를 50% 로설정하여쌓아올리는작업을하는마크업이다. <Grid Background= Black > <WebBrowser Opacity = 0.5 Name = wb1 Source= http://www.daum.net Margin= 0,68,33,70 HorizontalAlignment= Right /> <Canvas Background= CornflowerBlue Name= cv1 Margin= 131,30,142,108 /> <Canvas Background= HotPink Name= cv2 Margin= 31,68,0,70 Opacity= 0.5 HorizontalAlignment= Left /> </Grid> 개발자는위의 XAML 마크업을통해 WebBrowser 클래스의인스턴스에도 Opacity 프로퍼티가적용되기를원할것이다. 하지만결과는아래그림 4 와같이 WebBrowser 클래스의인스턴스에는특수효과가적용되지않는것을볼수있을것이다..NET 3.5 의 WebBrowser 클래스는내부적으로는 WindowsFormsHost 클래스의인스턴스로랩핑되어있기때문에 GDI 로렌더링하는방식을사용하기때문이다. 그림 3. Widows Presentation Foundation Architecture(2) WPF 가다양한장점들을제공하지만어플리케이션개발시갖는가장큰장점은위에서설명한효율적인렌더링효과를쉽게접근하여애니메이션등의시각효과를만들수있다는것이다. 하지만기존의 Win32 모델은각컨트롤이나도형이 GDI ( 혹은 GDI+) 와 user32.dll 영역을통해서윈도우에표현되고그려지도록되어있다. 그러므로상호운용성을이용하여 WPF 이전에개발된컨트롤들을사용할때는컨트롤에직접애니메이션등의효과를적용할수없다는문제가발생한다. 그렇게되면 WPF 를사용하는이점중에하나가사라지게되는것이다. 그림 4. WPF 상호운용성의렌더링문제 (2)

두번째는 GDI 로렌더링되는영역은항상최상위의 Priority 를가지게되어 WPF 렌더링영역위에겹쳐져서항상가장위에올라오는문제이다. 아래의 XAML 마크업은생성순서에따라 WebBrowser 클래스의인스턴스가 Canvas 클래스의인스턴스들사이에겹쳐서쌓여있도록시도한 XAML 마크업이다. <Grid Background= Black > <Canvas Background= CornflowerBlue Name= cv1 Margin= 131,30,142,108 HorizontalAlignment = Left VerticalAlignment= Top /> <WebBrowser Opacity = 0.5 Name = wb1 Source= http://www.daum.net Margin= 129,93,133,70 /> <Canvas Background= CornflowerBlue Name= cv2 Margin= 0,0,12,29 HorizontalAlignment= Right VerticalAlignment = Bottom Opacity= 0.5 /> </Grid> 하지만결과는아래의그림 5. 와같이생성순서를 통해 생기는 z-order(z축 순서값 ) 를 무시하고 WebBrower 클래스의인스턴스가화면에서가장위에 쌓여있게 된다. 이 역시 WebBrowser 클래스의 인스턴스가 GDI로 렌더링 하는 방식을 사용하기 때문이다. 그림 6. 시스템구조 구현한각블록의기능들은아래와같다. WindowsFormshostEX 개선된 Win32 상호운용성을위해 WPF 측에서사용하게될컨트롤이다. 기존의 WindowsFormshost 와마찬가지로 Winform, OCX, COM 객체들을호스팅하고사용할수있는기능을제공한다. 그리고추가적으로내부적으로는이미지버퍼의이미지를실시간으로받아와출력해주는역할을한다. 구현된라이브러리는 XAML 마크업과 C#,VB.NET 코드모두에서사용할수있도록제공된다. 아래는우리의라이브러리를사용한 XAML 마크업의모습이다. <interop:windowsformshostex x:name= WebBrowserhost > < interop:windowsformshostex.contentcontrol> <forms:webbrowser Uri = http://os.korea.ac.kr Width= 200 Height= 200 /> </interop:windowsformshostex.contentcontrol> </interop:windowsformshostex> 그림 5. WPF 상호운용성의 z-order 문제 아래는우리의라이브러리를사용한 C# 의환경에서의코드의모습이다. 3. 시스템디자인및구현 3.1 시스템디자인본논문에서제안하는시스템의구조는아래의그림 6 과같다. DirectX, milcore, User32, GDI+ 영역은 Native 로작성되어기존의 WPF 시스템에서동작하고있는부분이다. 실제라이브러리를개발하는부분은 WindowsFromsHostEx, HwndHostEx, Mouse Hooker Class, Keyboard Hooker Class, Hwnd Buffering Engine, Hwnd Host Dialog 이다. WindowsFormshostEx hostex = new WindowsFormsHostEx(); System.Windows.Forms.WebBrowser wb = new System.Windows.Forms.WebBrowser(); hostex.contentcontrol = wb; webbrowser.navigaet( http://os.korea.ac.kr ); HwndHostEx WindowsFormsHostEx 와유사한역할을하지만 Win32 네이티브객체를 hwnd 단위에서핸들링하여호스팅한다는점이차이점이다. 우선구현매커니즘상

HwndHostEx 에한해서는 XAML 을지원하지는않고대신에비하인드코드부에서 Background 에서동작하는 Win32 Native Code 의 HWND 객체를바로받아서처리해주는호스팅을지원한다. Hwnd Host Dialog win32 객체를좀더편하게핸들링하기위한클래스로내부적으로는그래픽처리가되지만밖으로는표시되지않는다. 기본적으로.NET 2.0 winform 객체로구성되며기본적으로 WindowsFormHost 와같은 WPF 기본상호운용컨트롤을사용하지않으면화면에표시되지않기때문에화면출력과관련될문제가발생할가능성은 0% 이다. 좀더내부적인처리로는키보드, 마우스이벤트 hooking class 에정보를제공하는것과 User32 와 GDI 를핸들링하는처리가이루어진다. 라이브러리인 WindowsFormsHostEx, HwndHostEx 를통해서상호운용하고자하는 Win32 객체를호스팅하면라이브러리의코어부분인 4 가지모듈들이데이터를분석하여 User32, GDI+ 과통신한다. 이런과정을통해서 Win32 객체의순수한이미지를가져오기위해이미지버퍼의내용을가져와그림 7 과같이 WPF 쪽으로전송시켜보여줄수있다. 따라서 WPF 쪽에서는이미지가뿌려지게되는형식을취하기때문에각종 WPF 의이벤트를적용할수있게되는것이다. 또한 WPF 쪽으로전송된화면이어떤상태로변환되어서보이는지에상관없이마우스키보드이벤트를정상적으로받게하기위해 Mouse, Keyboard Hooker 가 3 차원의좌표를 2 차원화시켜가져올수있도록한다. 아래그림 8 은시스템의데이터흐름을보여준다. Hwnd Buffering Engine Hwnd Host Dialog Class 에서요청한현재화면의이미지를버퍼링하여 WPF 측으로넘겨주기위한클래스이다. MouseHooker Class, KeyboardHooker Class 사용자의입력을받아상호운용성을통해호스팅된객체에입력을전달해주는기능을한다. 별도의마우스, 키보드의입력을처리하는클래스가필요한이유는다음과같다. 그림 7 과같이 WPF 에서는컨트롤에다양한효과를줄수있기때문에호스팅된컨트롤의좌표는 3 차원의좌표를갖을것이다. 그렇기때문에 WPF 에서얻은 3 차원의좌표를 2 차원으로변환하여 Native 이벤트로적용하는기능이포함된 MouseHooker, KeyboardHooker 클래스가필요하다. 4. 결론 그림 8. 데이터플로우다이어그램 그림 7. WPF 의효과적용모습 3.2 시스템데이터플로우라이브러리를포함한전체시스템에서의데이터교환과정은다음과같이발생할수있다. 우선기존의 WindowsFormsHost, HwndHost 컨트롤을대신하여우리가구현한기능을사용할수있는 본논문에서우리는 Microsoft.Net Framework 3.0 의 Windows Presentation Foundation 의상호운용성에서발생하는그래픽문제를발견하였다. 그리고문제를해결하기위한새로운라이브러리를제안하였다. 새로운라이브러리는상호운용성을이용하여호스팅한객체를화면에보이기위해이미지버퍼에올라가있는정보를얻어와이미지컨트롤을통해이미지로보이는방식을이용하여화면에출력되는그래픽문제를해결하였다. 또한그래픽의다양한효과에알맞은키보드, 마우스입력처리를위하여키보드와마우스를후킹하는클래스를구현하여입력문제를해결할수있었다. 그리고우리의라이브러리를이용하여아래의그림 9 와같은예제어플리케이션을제작할수있었다.

그림 9. 예제어플리케이션 참고문헌 [1].NET Framework Developer Center, Microsoft Developer Network, http://msdn.microsoft.com/ko-kr/netframework/default.aspx [2] Adam Nathan 저, 한용희역, 애덤네이선의 WPF 언리쉬드, ISBN : 9788990758897 [3] WPF Interoperation: "Airspace" and Window Regions Overview, Microsoft Developer Network, http://msdn.microsoft.com/en-us/library/aa970688.aspx [4] WPF Architecture, Microsoft Developer Network, http://msdn.microsoft.com/en-us/library/ms750441.aspx