2014-06-16 5 views
6

높은 DPI 설정에서 WinForms 앱을 올바르게 표시하는 데 문제가 있습니다. 다양한 웹 사이트를 확인한 후 WinForms에 모두 올바른 AutoScaleMode가 있습니다. 이 설정을 DPI 및 글꼴 설정했습니다. 그러나 높은 DPI 설정 (예 : 125 %)을 사용하면 양식이 항상 하단 근처에서 잘릴 수 있습니다.DPI로 정확하게 WinForms를 확장하는 데 문제가 있습니다

일부 코드를 추가하여 양식이로드 될 때 AutoScaleMode를 DPI로 설정하면 폼이로드 될 때 AutoScaleDimensions가 120,120이고 CurrentAutoScaleDimensions도 120,120 인 것으로 나타납니다. Form.designer.cs 파일에는 AutoScaleDimension을 96,96으로 설정하는 줄이 있습니다.

AutoScaleDimension 올바르게 새로운 System.Drawing.SizeF (6 층, 13F)로 설정되어 내가 글꼴로 AutoScaleMode를 설정하면, 나는 디자이너에서 볼 수

있지만 폼이로드가 AutoScaleDimension 및 CurrentAutoScaleDimension 모두 8 층으로 설정된 경우, 16F.

이 응용 프로그램은 일부 WPF와 WinForms를 혼합하여 WPF 화면이 먼저 나타납니다. 따라서 DPI Scaling in .Net 3.5 in Mixed WinForms and WPF Application을 기반으로 응용 프로그램의 TextFormattingMode를 설정하고 "표시"하려면 먼저 표시되는 WPF 화면을 설정했지만 아무런 효과가 없습니다.

저는 솔직히이 문제의 원인을 놓치지 않았습니다. 런타임에 DPI를 감지하여 프로그래밍 방식으로 내용의 크기를 조정하는 코드를 추가 할 수는 있지만이를 수행하지 않아도됩니다. AutoScaleMode (및 관련) 속성은이를 자동으로 처리합니다. 그렇다면이 문제를 일으킬 수있는 다른 원인은 무엇입니까?

+0

125 %는 "높은 DPI"가 아닙니다. 매니페스트에 설정되지 않은 경우에도 런타임에 높은 DPI 인식 플래그를 설정하기 때문에 WPF는 확실히 영향을 미칩니다. WinForms는 스케일링을 수행해야하는지 또는 OS가 자동으로 그렇게 할지를 혼동 할 수 있습니다. –

+0

벤, 미안, "더 높은 DPI"가 더 정확할 수도 있습니다. WPF 화면을 먼저 표시하지 않도록 앱을 변경 한 후에도 문제가 지속 되었기 때문에 좀 더 자세하게 살펴볼 필요가 있습니다. – WarnerYoung

+0

현대적인 % 기반 설정은 전체 높은/낮은 것을 혼란스럽게 만듭니다. 큰 글꼴의 경우 "인치당 도트 수"가 낮습니다. 구식 DPI 설정은 높은 글꼴에 사용되는 숫자가 낮을수록 최신 버전의 Windows는 표준 DPI로 가정하고 글꼴 크기 비율을 사용하므로 높은 글꼴에 더 높은 값이 사용됩니다. 일반적으로 높거나 낮은 수치가 아닌 실제 수치를 사용하는 것이 덜 혼란 스럽습니다. –

답변

0

모니터 크기와 DPI 설정이 높을수록 화면이 전체 양식을 표시 할만큼 커지지 않을 수 있습니까? 1024 x 768 winforms 앱을 개발하고 사용자 DPI 설정으로 놀고 있기 때문에 그렇게 말합니다. DPI를 150 %로 설정하면 모니터의 하단 부분을 더 이상 볼 수 없지만 앱의 크기가 올바르게 조정됩니다.

+0

좋은 지적입니다, 제프, 아니, 여기서 일어난 일이 아니야. 양식은 화면에 맞추기에 여전히 작으며 정확하게 크기가 맞지 않습니다. – WarnerYoung

8

저는 며칠 전에 비슷한 문제가있었습니다. 2 시간의 연구 끝에 마침내 매우 간단한 해결책을 발견했습니다.을 응용 프로그램 매니페스트에 추가했습니다. 다음은 Microsoft's website의 예입니다. 내 경우를 들어

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" > 
    <asmv3:application> 
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> 
     <dpiAware>True</dpiAware> 
    </asmv3:windowsSettings> 
    </asmv3:application> 
</assembly> 

, 나는 정상적으로 작동하도록하기 위해 <dpiAware>에 별 모니터를 설정해야합니다. 즉, 중간에있는 라인을 <dpiAware>Per-monitor</dpiAware>으로 변경하십시오. 각 값 사이

의 차이는 (다음은 MSDN에서입니다) 아래에 나열되어 있습니다 :

  • 거짓 - DPI를 인식하지 못하기에 응용 프로그램을 설정합니다.
  • True - 응용 프로그램을 시스템 DPI를 인식하도록 설정합니다.
  • 모니터 단위 - Windows 8.1에서 DPI를 모니터 단위로 응용 프로그램을 설정합니다. Windows Vista에서 Windows 8까지는 DPI를 인식하지 못하도록 응용 프로그램을 설정합니다.
  • True/PM - Windows 8.1에서 응용 프로그램을 모니터마다 DPI를 인식하도록 설정합니다. Windows Vista에서 Windows 8까지는 응용 프로그램을 시스템 -DPI 인식으로 설정합니다.
관련 문제