[C#] 윈폼 컨트롤 박스 없이 마우스 드래그앤 드롭으로 이동.
원래 다른 분 블로그에 있었던 것인데, 퍼왔습니다. 출처를 표시해야 하는데, 프로젝트 코드에 넣은지 꽤 돼서 출처 찾기가 힘드네요. ㅠ 혹시 보시다가 본인이 쓴 글이라고 하시면 출처표시 해 드리겠습니다.
일단 설명을 드리자면, 윈폼에서 최소화, 최대화, 닫기 및 상단의 텍스트 표시를 없애고 이미지만 나오게 윈폼을 개발하는 경우가 있지요. 사실 ControlBox 를 마우스로 드래그앤 드롭하면 움직이는데, 전체를 이미지로 덮어 버리는 경우에는 그런 부분을 만들어 줘야 합니다.
public Point ptRect = new Point(0, 0);
private void panelKeypadMouseDown(object sender, MouseEventArgs e)
{
ptRect.X = e.X;
ptRect.Y = e.Y;
}
private void panelKeypadMouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point pt = new Point(this.Location.X + e.X – ptRect.X,this.Location.Y + e.Y – ptRect.Y);
this.Location = pt;
}
}
*C++ 에서의 구현(2011.07.21 Update)
*
void CLoginDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
PostMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
CDialogEx::OnLButtonDown(nFlags, point);
}
**
*다이얼로그의 OnLButtonDoown 에서 위의 PostMessage 부분 추가해 주면 됨. 생각보다 쉽게 구현됨.