728x90
728x170
▶ 비트맵으로 커서 만들기 예제
using System.Drawing;
using System.Windows.Forms;
...
private CheckBox checkBox;
...
Bitmap bitmap = CursorHelper.GetBitmap(this.checkBox);
Cursor cursor = CursorHelper.GetCursor(bitmap, 0, 0);
728x90
▶ 비트맵으로 커서 만들기
using System;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Windows.Forms;
/// <summary>
/// 커서 헬퍼
/// </summary>
public class CursorHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Structure
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 아이콘 정보 - IconInfo
/// <summary>
/// 아이콘 정보
/// </summary>
private struct IconInfo
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 아이콘 여부
/// </summary>
public bool IsIcon;
/// <summary>
/// 핫스팟 X
/// </summary>
public int HotSpotX;
/// <summary>
/// 핫스팟 Y
/// </summary>
public int HotSpotY;
/// <summary>
/// 마스크 비트맵 핸들
/// </summary>
public IntPtr MaskBitmapHandle;
/// <summary>
/// 색상 비트맵 핸들
/// </summary>
public IntPtr ColorBitmapHandle;
#endregion
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Import
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 아이콘 간접 생성하기 - CreateIconIndirect(iconInfo)
/// <summary>
/// 아이콘 간접 생성하기
/// </summary>
/// <param name="iconInfo">아이콘 정보</param>
/// <returns>아이콘 핸들</returns>
[DllImport("user32.dll")]
private static extern IntPtr CreateIconIndirect(ref IconInfo iconInfo);
#endregion
#region 아이콘 정보 구하기 - GetIconInfo(iconHandle, iconInfo)
/// <summary>
/// 아이콘 정보 구하기
/// </summary>
/// <param name="iconHandle">아이콘 핸들</param>
/// <param name="iconInfo">아이콘 정보</param>
/// <returns>처리 결과</returns>
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetIconInfo(IntPtr iconHandle, ref IconInfo iconInfo);
#endregion
#region 객체 삭제하기 - DeleteObject(handle)
/// <summary>
/// 객체 삭제하기
/// </summary>
/// <param name="handle">핸들</param>
/// <returns>처리 결과</returns>
[DllImport("gdi32.dll")]
private static extern bool DeleteObject(IntPtr handle);
#endregion
#region 아이콘 제거하기 - DestroyIcon(iconHandle)
/// <summary>
/// 아이콘 제거하기
/// </summary>
/// <param name="iconHandle">아이콘 핸들</param>
/// <returns>처리 결과</returns>
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool DestroyIcon(IntPtr iconHandle);
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 커서 구하기 - GetCursor(bitmap, hotSpotX, hotSpotY)
/// <summary>
/// 커서 구하기
/// </summary>
/// <param name="bitmap">비트맵</param>
/// <param name="hotSpotX">핫스팟 X</param>
/// <param name="hotSpotY">핫스팟 Y</param>
/// <returns>커서</returns>
public static Cursor GetCursor(Bitmap bitmap, int hotSpotX, int hotSpotY)
{
IntPtr cursorHandle;
IntPtr iconHandle = bitmap.GetHicon();
IconInfo iconInfo = new IconInfo();
GetIconInfo(iconHandle, ref iconInfo);
iconInfo.HotSpotX = hotSpotX;
iconInfo.HotSpotY = hotSpotY;
iconInfo.IsIcon = false;
cursorHandle = CreateIconIndirect(ref iconInfo);
if(iconInfo.ColorBitmapHandle != IntPtr.Zero)
{
DeleteObject(iconInfo.ColorBitmapHandle);
}
if(iconInfo.MaskBitmapHandle != IntPtr.Zero)
{
DeleteObject(iconInfo.MaskBitmapHandle);
}
if(iconHandle != IntPtr.Zero)
{
DestroyIcon(iconHandle);
}
return new Cursor(cursorHandle);
}
#endregion
#region 비트맵 구하기 - GetBitmap(control)
/// <summary>
/// 비트맵 구하기
/// </summary>
/// <param name="control">컨트롤</param>
/// <returns>비트맵</returns>
public static Bitmap GetBitmap(Control control)
{
Bitmap bitmap = new Bitmap(control.Width, control.Height);
control.DrawToBitmap(bitmap, new Rectangle(0, 0, control.Width, control.Height));
return bitmap;
}
#endregion
}
728x90
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] 알림 창 만들기 (0) | 2017.01.10 |
---|---|
[C#/WINFORM] 폼 강제로 칠하기 (0) | 2016.12.14 |
[C#/WINFORM] 전체 화면 그래픽스 객체 구하기 (0) | 2016.12.14 |
[C#/WINFORM] Application 클래스 : StartupPath 정적 속성을 사용해 애플리케이션 실행 경로 구하기 (0) | 2016.12.11 |
[C#/WINFORM] Application 클래스 : ThreadException 이벤트를 사용해 예외 처리하기 (0) | 2016.12.04 |
[C#/WINFORM] 특정 위치에서 컨트롤 구하기 (0) | 2016.08.15 |
[C#/WINFORM] 아이콘 구하기 (0) | 2016.07.12 |
[C#/WINFORM] 시스템 아이콘 구하기 (0) | 2016.06.15 |
[C#/WINFORM] 리소스 아이콘 구하기 (0) | 2016.06.15 |
[C#/WINFORM] FolderBrowserDialog 클래스 사용하기 (0) | 2016.06.01 |