728x90
반응형
제목 만들기 참 까다롭고 설명하기 난해할 것 같은데, 예를 들어 설명해보겠습니다.
폼의 Borderstyle을 None으로 해서 툴박스나 X박스 없이 이미지를 백그라운드로 입혀서 이쁘게 만들려고 하면, 어? 툴박스가 사라져서 폼을 이동할 수 있는 방법이 사라집니다.
이런 어플리케이션 보면 거의 움직이는 것을 본적이 없는 것 같네요.
그런데 난 움직이게 하고 싶다. 하면 이 글을 잘 찾아오신 겁니다.
단, 윈도우32 API를 이용할 것이기 때문에 윈도우에서만 됩니다.
아래 예제는 폼 자체에 이벤트를 후킹할 것이기 때문에 폼의 영역 아무곳을 클릭해서 잡아 끌면 폼 자체가 이동됩니다.
옛날 윈도우 개발하시던 분들 SendMessage, ReleaseCapture 많이 보셨을 겁니다. 이것을 이용합니다.
const int WM_SYSCOMMAND = 0x0112;
const int SC_FORMMOVE = 0xF012;
[System.Runtime.InteropServices.DllImport("User32")]
private static extern int ReleaseCapture();
[System.Runtime.InteropServices.DllImport("User32")]
private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);
private void frmLogin_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
ReleaseCapture();
SendMessage(this.Handle.ToInt32(), WM_SYSCOMMAND, SC_FORMMOVE, 0);
}
}
private void frmLogin_MouseUp(object sender, MouseEventArgs e)
{
ReleaseCapture();
}
지금 확인해보니 MouseUp 이벤트는 발생하지 않는 것 같긴합니다.
P.S. 태그 따기 어려운 글이네요. T_T
반응형
'개발 > C#' 카테고리의 다른 글
[2021.05] Enum을 Combobox에 값을 넣을 때 Foreach 문 활용방법 (0) | 2021.05.14 |
---|---|
[2021.05] 모니터 해상도 및 배율에 따른 예외 처리 (0) | 2021.05.10 |
[2021.04] C#에서 이중 인증 중 OTP 활용 방법 (0) | 2021.04.06 |
[2021.03] C#에서 Unix Time을 구해보자. (0) | 2021.03.26 |
[2021.03] C# 프로그램을 관리자 권한으로 실행하기 (0) | 2021.03.26 |