1

Я борюсь в проекте на Windows Mobile 6.5. Я пишу настраиваемые элементы управления, которые могут строить линии, в которых пользователь нажал на пользовательские элементы управления.C# customcontrol OnMouseDown - всегда ошибается Y позиция

У меня возникла проблема с тем, что OnMouseDown (MouseEventArgs e) не вернет правильную e.Y (Y позиция щелкнутого местоположения). Кто-нибудь, пожалуйста, помогите! Я потратил несколько часов на эту проблему, но все еще не могу понять, что случилось. (Я думаю, что я нахожусь в неправильном направлении)

Вот что приложение выглядит следующим образом:

My application looks like

Когда я попытался запустить в эмуляторе WM6.5, тем OnMouseDown (MouseEventArgs е) всегда return неправильная позиция Y (она возвращает Y-местоположение минус некоторые значения). Например: я нажал на центр элемента управления для первого щелчка, но, очевидно, e.Y не находится в центре.

obviously the e.Y is not at center

Вот код спинет:

protected override void OnPaint(PaintEventArgs pe) 
    { 

     Graphics g = pe.Graphics; 

     Pen pen_black = new Pen(Color.Black); 
     g.DrawLine(pen_black, 0, 0, this.Width, 0); 
     g.DrawLine(pen_black, 0, this.Height - 1, this.Width, this.Height - 1); 
     g.DrawLine(pen_black, 0, 0, 0, this.Height); 
     g.DrawLine(pen_black, this.Width - 1, 0, this.Width - 1, this.Height); 

     // draw center cross 
     g.DrawLine(pen_black, this.Width/2, this.Height/2 + 10, this.Width/2, this.Height/2 - 10); 
     g.DrawLine(pen_black, this.Width/2 + 10, this.Height/2, this.Width/2 - 10, this.Height/2); 


     // draw lines between all mouse down point 
     if (pointCount > 0) 
     { 
      Pen pen_red = new Pen(Color.Red); 

      for (int i = 0; i < pointCount - 1; i++) 
      { 
       g.DrawLine(pen_red, lineList[i].X, lineList[i].Y, lineList[i + 1].X, lineList[i + 1].Y); 
      } 
     } 

      base.OnPaint(pe); 
    } 

    protected override void OnMouseDown(MouseEventArgs e) 
    { 
     // Put the last point to array    
     lineList[pointCount] = new Point(e.X, e.Y); 

     pointCount++; 
    } 

Вот исходный код из моих пользовательских элементов управления-: Download here Спасибо!

+0

Я уверен, что это не имеет ничего общего с ColdFusion. Почему этот тег? –

ответ

2

Это может показаться сумасшедшим, и даже может быть лучше в качестве комментария, если бы не было на самом деле возможное решение:

Перейти в настройках системы и настройки экрана.

Настройки> вкладка Система> Экран> Align Screen

System SettingsScreen Settings

+0

Я думаю, что я ничего не могу сделать, кроме этого. Фактически, я нашел ту же проблему с реальным устройством. –

1

Значение Y, скорее всего, является координатами экрана, а не координатами внутри прямоугольника, в который вы входите. Думаю, вам нужно будет учитывать высоту панели задач.

Прошло много времени с тех пор, как я работал с WM, но помню, что у меня были подобные проблемы при захвате очков через MouseEventArgs.

+0

Спасибо за ответ, я установил this.WindowState = System.Windows.Forms.FormWindowState.Maximized, чтобы скрыть панель задач. Но e.Y все еще некорректен. –