728x90
반응형
728x170
▶ MARGIN.cs
using System.Windows;
namespace TestProject
{
/// <summary>
/// 마진
/// </summary>
public struct MARGIN
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 왼쪽
/// </summary>
public int Left;
/// <summary>
/// 오른쪽
/// </summary>
public int Right;
/// <summary>
/// 위쪽
/// </summary>
public int Top;
/// <summary>
/// 아래쪽
/// </summary>
public int Bottom;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MAGIN(thickness)
/// <summary>
/// 생성자
/// </summary>
/// <param name="thickness">두께</param>
public MARGIN(Thickness thickness)
{
Left = (int)thickness.Left;
Right = (int)thickness.Right;
Top = (int)thickness.Top;
Bottom = (int)thickness.Bottom;
}
#endregion
}
}
728x90
▶ GlassHelper.cs
using System;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Media;
using System.Windows.Interop;
namespace TestProject
{
/// <summary>
/// 글래스 헬퍼
/// </summary>
public class GlassHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Import
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region Aero 기능 사용하기 - DwmExtendFrameIntoClientArea(windowHandle, margin)
/// <summary>
/// Aero 기능 사용하기
/// </summary>
/// <param name="windowHandle">윈도우 핸들</param>
/// <param name="margin">마진</param>
[DllImport("dwmapi.dll", PreserveSig=false)]
private static extern void DwmExtendFrameIntoClientArea(IntPtr windowHandle, ref MARGIN margin);
#endregion
#region Aero 기능 사용 가능 여부 구하기 - DwmIsCompositionEnabled()
/// <summary>
/// Aero 기능 사용 가능 여부 구하기
/// </summary>
/// <returns>Aero 기능 사용 가능 여부</returns>
[DllImport("dwmapi.dll", PreserveSig=false)]
private static extern bool DwmIsCompositionEnabled();
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 글래스 프레임 확장하기 - ExtendGlassFrame(window, marginThickness)
/// <summary>
/// 글래스 프레임 확장하기
/// </summary>
/// <param name="window">윈도우</param>
/// <param name="marginThickness">마진 두께</param>
/// <returns>처리 결과</returns>
public static bool ExtendGlassFrame(Window window, Thickness marginThickness)
{
if(!DwmIsCompositionEnabled())
{
return false;
}
IntPtr windowHandle = new WindowInteropHelper(window).Handle;
if(windowHandle == IntPtr.Zero)
{
throw new InvalidOperationException("글래스 확장 전 윈도우가 표시되어야 합니다.");
}
window.Background = Brushes.Transparent;
HwndSource.FromHwnd(windowHandle).CompositionTarget.BackgroundColor = Colors.Transparent;
MARGIN margins = new MARGIN(marginThickness);
DwmExtendFrameIntoClientArea(windowHandle, ref margins);
return true;
}
#endregion
}
}
300x250
▶ MainWindow.xaml
<Window x:Class="TestProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="800"
Height="600"
Title="투명 윈도우 만들기">
</Window>
▶ MainWindow.xaml.cs
using System;
using System.Windows;
namespace TestProject
{
/// <summary>
/// 메인 윈도우
/// </summary>
public partial class MainWindow : Window
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainWindow()
/// <summary>
/// 생성자
/// </summary>
public MainWindow()
{
InitializeComponent();
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Protected
#region 소스 초기화시 처리하기 - OnSourceInitialized(e)
/// <summary>
/// 소스 초기화시 처리하기
/// </summary>
/// <param name="e">이벤트 인자</param>
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
GlassHelper.ExtendGlassFrame(this, new Thickness(-1));
}
#endregion
}
}
※ 윈도우 7에서 작동되었으나 윈도우 10에서는 작동되지 않았다.
728x90
반응형
그리드형(광고전용)
'C# > WPF' 카테고리의 다른 글
[C#/WPF] 사각형 2개 만들기 (0) | 2016.06.26 |
---|---|
[C#/WPF] 투시도법 직육면체 만들기 (0) | 2016.06.26 |
[C#/WPF] 정사도법 직육면체 만들기 (0) | 2016.06.26 |
[C#/WPF] Window 클래스 : 테두리 없는 윈도우 드래그 하기 (0) | 2016.02.03 |
[C#/WPF] Window 클래스 : 투명 윈도우 만들기 (0) | 2016.02.03 |
[C#/WPF] ScrollViewer 클래스 : ScrollChanged 이벤트를 사용해 그리드 컨트롤 흉내내기 (0) | 2016.02.03 |
[C#/WPF] InputManager 클래스 : 키 이벤트 발생시키기 (0) | 2016.01.24 |
[C#/WPF] Keyboard 클래스 : CTRL+C 키 입력 처리하기 (0) | 2016.01.24 |
[C#/WPF] KeyBinding 엘리먼트 : CTRL+X 단축키 사용하기 (0) | 2016.01.24 |
[C#/WPF] CTRL+X 키 입력 처리하기 (0) | 2016.01.24 |
댓글을 달아 주세요