Form 이나 Window 을 특정 모양으로 구성할 때
보통 별도 컨트톨을 이용해서 Caption 을 표시할 것이며 해당 Caption 을 구성한 컨트롤을 이용하여
화면(Form or Window) 을 이동시켜야 한다.
순진했을때는 mouse 위치를 가지고 계산해서 하려고 했었는데 그런 번거로운 작업없이 쉽게 구현이 가능하다.
WPF 에서는
Window 자체에 해당 기능의 메소드를 제공해준다.
public class Window : ContentControl, IWindowService
{
…….
//
// 요약:
// 마우스 왼쪽 단추를 누른 상태로 창 클라이언트 영역의 노출된 영역에서 창을 끌 수 있게 합니다.
//
// 예외:
// System.InvalidOperationException:
// 왼쪽 마우스 단추를 누르지 않은 경우
[SecurityCritical]
public void DragMove();
…
}
Winform 에서는
몇개의 API 를 통해서 구현이 가능하다.
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
[DllImportAttribute("user32.dll")]
private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
private static extern bool ReleaseCapture();
private const int WM_NCLBUTTONDOWN = 0xA1;
private const int HT_CAPTION = 0x2;
public Form1()
{
InitializeComponent();
}
private void label1_MouseDown(object sender, MouseEventArgs e)
{
if(e.Button == System.Windows.Forms.MouseButtons.Left)
{
ReleaseCapture();
SendMessage(this.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
}
}
'Dev::DotNet > C#' 카테고리의 다른 글
DLL 레지스트리 등록 API (1) | 2013.11.14 |
---|---|
Google gmail 로 메일 보내기 - c#, smtp (0) | 2013.10.31 |
GZipStream 을 이용한 문자열 압축 (0) | 2013.10.28 |
System.Drawing.Printing.PageSettings 의 PrintableArea 프로퍼티에 대한 문제 (0) | 2013.10.18 |
Windows Version 구분 (0) | 2012.08.10 |