2013-07-29 1 views
0

В настоящее время у меня есть приложение winform, которое относительно сильно зависит от чтения точек щелчка мыши. Это видео-приложение, которое позволяет пользователю нажимать на входящую видео-ленту с веб-камеры и рисовать линии на ней и делать другие вещи. Важной частью этого вопроса являются линии рисования. Простым примером является то, что если они нажимают где-то на видеопотоке, он мгновенно рисует горизонтальную линию по всему изображению в точке мыши.Форсировать программу Winform для работы при 96dpi?

Это работает безупречно на 96 точек на дюйм, но когда окна масштабируются до 125% масштабирования (Панель управления \ Все элементы панели управления \ Дисплей -> Средняя - 125%), которая масштабирует ее до 120 точек на дюйм, все идет в банк. Неожиданно приложение читает мышь как щелкнув гораздо дальше по картинке, чем на самом деле.

Все, что я делаю, это вытащить точное местоположение мыши на mouseclick. Это буквально так же просто, как

   using (Graphics g = Graphics.FromImage(tmpImage)) 
      { 
       g.DrawLine(new Pen(lineColor, lineWidth), 
          new Point(0, e.Location.X), new Point(tmpImage.Width, 
          e.Location.Y)); 
      } 

В 96dpi он рисует именно на мышь. При 120dpi, он тянет совсем немного к югу от мыши. Это огромная проблема для меня.

Можно ли каким-либо образом заставить приложение постоянно работать на частоте 96 точек на дюйм или какое-либо другое решение, чтобы заставить мое приложение работать в соответствии с обстоятельствами 120 + dpi?

Спасибо!

+2

Я настоятельно рекомендую WPF, если вам нужна независимость от независимого разрешения и независимость от DPI. Метод winforms 'X, Y' действительно ограничен, когда дело доходит до такого рода вещей, и вам придется прибегать ко всем видам ужасных хаков, чтобы нормально работать. –

+0

Увеличивает ли ваш масштаб изображение? Если да, возможно, вам придется «вычислить» коэффициент масштабирования. – Alex

+0

К сожалению, у меня нет большого выбора в аспекте Winform. Это приложение уже закончено, и это поздняя ошибка поиска (то, что я действительно не учитывал!). @ Alex - насколько я могу судить, изображение, по-видимому, не увеличивается с увеличением на дюйм. –

ответ

0

Посмотрите на AutoScaleMode Недвижимость. это то, что вам нужно.

По умолчанию AutoScaleMode устанавливается в AutoScaleMode.Font обычно в *.designer.cs изменениях, что AutoScaleMode.None без всякой накипи и вы можете использовать AutoScaleMode.Dpi с AutoScaleDimensions

Надеется, что это помогает

0

Для того, чтобы заставить приложение работать на 96 DPI напишите это в Form1_Load:

 Graphics g = this.CreateGraphics(); 
     if (g.DpiX != 96) 
     { 
      MessageBox.Show("Your message."); 
      this.Close(); 
     }