ActiveX 컨트롤 사용하기

WPF From 내부안에 긍즉적으로 다른 윈도우가 종속족으로 퐇마될 수 없습니다. 그러나 이를 가능하게 해주는 클래스가 지난 강좌(WPF에서 윈폼 컨트롤 클래스 사용히기)에서 다루었던 ElementClass입니다. Element 클래스를 이용하여 ActiveX를 컨트롤할 수 있는데요


ActiveX 컨트롤 추가하는 방법
1. ActiveX Importer(AXIMP.EXE)를 실행
(이 유틸리티는 윈도우즈 SDK의 닷넷컴퍼넌트에 포함되어 있습니다.)
  
2. Visual Studio에서 윈폼 프로젝트를 만든다음 [도구상자]-[항목선택]을 한다음 [도구상자선택항목]의 [COM 구성요소]템에 있는 ActiveX를 선택하여 도구상자에 추가한다음 이 컨트롤을 윈폼에 마우스로 드레그하여 추가하는 방법(추가하면 윈폼에서 자동으로 실행됩니다.)

이 강좌에서는 2번째 방법을 택하여 ActiveX를 추가해보겠습니다.

 



윈도우 미디어 플레이어 ActiveX를 추가하였습니다.

 

드레그 하여 윈폼에 추가합니다. 어쨌든 여기서 필요한 건 AxWMPLib.dll과 WMPLib.dll 이기 때문에 윈폼 프로젝트의 참조된 두개의 dll을 그대로 WPF 프로젝트의 참조에 추가해줍니다.

xaml Code

<Window x:Class="WPFActiveX.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="515" Width="450">
    <Grid x:Name="grid">
        
    </Grid>
</Window>

using System.Windows;
using System.Windows.Controls;
 
using System.Windows.Forms.Integration;
 
namespace WPFActiveX
{
    ///<summary>
    /// Window1.xaml에 대한 상호 작용 논리
    ///</summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
 
            this.Loaded += new RoutedEventHandler(Window1_Loaded);
        }
 
        void Window1_Loaded(object sender, RoutedEventArgs e)
        {
 
            grid.BeginInit();
 
            grid.Height = 500;
            grid.Width = 480;
 
            RowDefinition row = new RowDefinition();
            row.Height = new GridLength(450);
            grid.RowDefinitions.Add(row);
 
            row = new RowDefinition();
            row.Height = GridLength.Auto;
            grid.RowDefinitions.Add(row);
 
            AxWMPLib.AxWindowsMediaPlayer axWmp = new AxWMPLib.AxWindowsMediaPlayer();
            WindowsFormsHost host = new WindowsFormsHost();
            host.Child = axWmp;            
           
            TextBox txtUrl = new TextBox();
            txtUrl.Text = @"mms://wm.microsoft.com/ms/korea/etc/vs2008_1_Opening.wmv";
 
            string wmpURL = txtUrl.Text.ToString();
 
            grid.Children.Add(host);
            grid.Children.Add(txtUrl);
 
            Grid.SetRow(host, 0);
            Grid.SetRow(txtUrl, 1);
 
            axWmp.uiMode = "mini";
 
            axWmp.URL = wmpURL;
        }
    }
} 

코드설명은 ActiveX 부분만 간단히 설명하겠습니다.
AxWMPLib.AxWindowsMediaPlayer axWmp = new AxWMPLib.AxWindowsMediaPlayer();

위 코드는 윈도우 미디어 플레이어 ActiveX를 사용하기 위해 추가된 dll을 인스턴스 생성하는 부분입니다.

 axWmp.uiMode = "mini";
 
 axWmp.URL = wmpURL;

uiMode 프로퍼티는 윈도우 플레이어가 실행될때 열림상태를 정의 합니다. URL은 스트리밍 되는 동영상의 주소입니다. 로컬 및 온라인에 있는 동영상 모두 재생이 가능합니다.

Summary  
 WPF에서 ActiveX를 컨트롤 할 일은 그렇게 많지 않겠지만 기존에 개발된 ActiveX를 사용해야 한다면 좋은 대안이 될 수 있을 것입니다.

참고 사이트