3. Implementation/WPF & Silverlight
[WPF] Screen 영역에 투명한 사각형 그리기
SSKK
2010. 3. 25. 05:14
Off-Window 영역인 Screen 에다가 투명한 사각형 테두리를 그리고 싶은 경우에, 다음의 방법들을 고려해 볼 수 있다. (현재 UISpy 와 유사한 Application 을 개발중인데 이 App 에 필요한 기능이다.)
GDI 또는 GDI+ 를 이용하는 방법인데,
GDI + 는 다중 모니터를 사용하는 경우에 Graphics 개체가 제대로 동작하지 않는걸 확인하였고,
GDI 를 직접 이용하는 것은 투명 처리등과 같은 복잡한 구현을 직접 해야 하는 번거로움이 있다.
이때 WPF 를 이용하면 굉장히 쉽게 구현할 수 있다.
투명한 윈도우를 만들고, 투명 윈도우를 전체 화면 영역의 크기로 변경한다. xaml 은 다음과 같다.
1. 투명처리를 하기 위해서 Background 와 AllowsTransparency, WindowStyle 을 각각 Transparent, True, None 으로 설정해야 한다.
2. 그리고 투명한 윈도우가 최상위 윈도우가 도도록 TopMost 속성을 True 로 하고, 위치를 Left=0, Top=0 으로 설정한다.
3. ShowIniTaskbar를 False 로 설정하여 태스크바에 목록에 추가되지 않도록 한다.
4. DockPanel 과 Rectangle 을 추가한다.
클래스는 다음과 같이 구현한다.
초기화싱 윈도우의 위치와 크기를 지정하였는데, 이것은 필요할 때 변경하면 된다.
아래는 소스.
GDI 또는 GDI+ 를 이용하는 방법인데,
GDI + 는 다중 모니터를 사용하는 경우에 Graphics 개체가 제대로 동작하지 않는걸 확인하였고,
GDI 를 직접 이용하는 것은 투명 처리등과 같은 복잡한 구현을 직접 해야 하는 번거로움이 있다.
이때 WPF 를 이용하면 굉장히 쉽게 구현할 수 있다.
투명한 윈도우를 만들고, 투명 윈도우를 전체 화면 영역의 크기로 변경한다. xaml 은 다음과 같다.
1. 투명처리를 하기 위해서 Background 와 AllowsTransparency, WindowStyle 을 각각 Transparent, True, None 으로 설정해야 한다.
2. 그리고 투명한 윈도우가 최상위 윈도우가 도도록 TopMost 속성을 True 로 하고, 위치를 Left=0, Top=0 으로 설정한다.
3. ShowIniTaskbar를 False 로 설정하여 태스크바에 목록에 추가되지 않도록 한다.
4. DockPanel 과 Rectangle 을 추가한다.
<Window x:Class="WpfApplication2.Window2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window2" Height="100" Width="200" WindowStyle="None" Left="0" Top="0" AllowsTransparency="True" Background="Transparent" Topmost="True" ShowInTaskbar="False" Margin="0,0,0,0" > <DockPanel LastChildFill="True" > <Rectangle Stroke="Red" StrokeThickness="3" /> </DockPanel> </Window> |
클래스는 다음과 같이 구현한다.
초기화싱 윈도우의 위치와 크기를 지정하였는데, 이것은 필요할 때 변경하면 된다.
namespace WpfApplication2 { /// <summary> /// Window2.xaml에 대한 상호 작용 논리 /// </summary> public partial class Window2 : Window { public Window2() { InitializeComponent(); // 원하는 위치로 이동시키고, 크기를 조절한다. this.Left = 2000; this.Top = 500; this.Width = 100; this.Height = 100; } } } |
아래는 소스.