2010-03-12 2 views
2

마우스 휠이있는 그림 상자에 확대/축소 효과를 적용하려고합니다. 마우스 중간 버튼을 사용하여 확대하거나 축소 할 때를 제외하고는 괜찮습니다. 그러나 마우스 커서가있는 지점을 확대하거나 축소하지는 않습니다. 나는 그 지점을 확대 할 때 항상 슬라이드를 원한다. 코드 스 니펫을 추가하여 작동하도록 도와주세요.확대/축소 효과를 시도하는 중

int i = 5; 
int index = 10; 
private double[] zoomfactor = { .25, .33, .50, .66, .80, 1, 1.25, 1.5, 2.0, 2.5, 3.0 }; 

private void Zoom(int i) 
{ 

    double new_Zoom = zoomfactor[i]; 

    imgBox.Width = Convert.ToInt32(imgBox.Image.Width * new_Zoom); 
    imgBox.Height = Convert.ToInt32(imgBox.Image.Height * new_Zoom); 

} 

private void On_wheel(object sender, System.Windows.Forms.MouseEventArgs e) 
{ 
    i = i + e.Delta/120; 
    if (i < 0) 
    { 
    i = 0; 
    } 
    else 
    { 
    if (i <= index) 
     i = i; 
    else 
     i = index; 
    } 
    Zoom(i); 
} 

답변

2

양식과 관련된 마우스 위치를 기반으로 그림 상자 위치를 조정해야합니다.

var i = 5; 
var zoomfactor = new[] {.25, .33, .50, .66, .80, 1, 1.25, 1.5, 2.0, 2.5, 3.0}; 
var origin = new Point(100, 100); 
var image = Image.FromFile(@"c:\example.png"); 
var imgBox = new PictureBox { 
     Location = origin, 
     Size = image.Size, 
     Image = image, 
     SizeMode = PictureBoxSizeMode.StretchImage 
    }; 
var form = new Form { 
     Size = new Size(800, 600), 
     Controls = {imgBox} 
    }; 
form.MouseWheel += (sender, e) => { 
     i += e.Delta/120; 
     if (i < 0) { 
      i = 0; 
     } 
     if (i >= zoomfactor.Length) { 
      i = zoomfactor.Length - 1; 
     } 
     var newZoom = zoomfactor[i]; 
     imgBox.Width = (int) (imgBox.Image.Width*newZoom); 
     imgBox.Height = (int) (imgBox.Image.Height*newZoom); 
     imgBox.Left = (int) (e.X - newZoom*(e.X - origin.X)); 
     imgBox.Top = (int) (e.Y - newZoom*(e.Y - origin.Y)); 
    }; 
form.ShowDialog(); 
+0

당신이 사방 요즘 "VAR"를 사용하여 단지 때 실제 데이터 유형을 갖는 점은 무엇입니까 ... : 여기

는이 작업을 수행하는 방법의 거친하지만 작업 예입니다? 나는 심지어 당신이 C#에서 var를 사용할 수 있다는 것을 알지 못했습니다. 나는 지난 주를 제외하고는 그것을 본 적이 한번도 없었습니다 ... –

+3

var은 "실제 데이터 유형"입니다. 암시 적으로 타입이 지정되었습니다. – Eric

+0

고마워요. 나는 애니메이션을 할 때와 같은 것을 필요로한다. – user292258

0

당신은 마우스를 복용하지 않는 계정에 좌표

여기 내 코드입니다.

MouseEventArgs 클래스는 마우스가 (X, YLocation 속성) 인 곳을 알려주며 그에 따라 조정해야합니다.

관련 문제