2014년 4월 21일 월요일

C# 마우스 좌표 계산

프로그램을 짜다보면 마우스 좌표를 계산해야 할때가 있다.
문제는 상황에 따라 써야할 마우스 좌표가 다르다는것.

예를 들어 이미지 뷰어를 만들때, 프로그램 폼이 있고, 그안에 픽쳐 박스를 두고, 그 픽쳐 박스안에 사각형 영역을 만들어서 그 사각형 영역안에 이미지를 보여 주고 있을 경우 발생하는 마우스 위치 정보는...

 화면 좌표, 폼 좌표, 픽쳐박스 좌표, 사각형 영역 좌표 와 이미지상의 마우스 좌표

등등... 이 있다.
여기다 이미지 확대/축소 기능까지 있다면 더 계산은 복잡해 진다.

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    Control control = (Control)sender;
    Point setXY = control.PointToScreen(new Point(e.X, e.Y));

    //e.X                           : 디스플레이 중인 이미지상의 좌표
    //setXY.X                       : 모니터 상의 좌표
    //imgRect.X                     : 픽쳐박스안에 있는 사각형 영역의 좌표
    //(e.X - imgRect.X)             : 전체 이미지 (1:ratio) 상의 좌표
    //(e.X - imgRect.X) / ratio     : 전체 이미지 (1:1) 상의 좌표
}

휴... 아직도 좀 헷깔리지만, 대충 이렇다.