2024년 10월 3일 목요일

C# 윈폼 작업시 AutoScaleMode

프로그램이 시작될때 AutoScaleMode가 Font나 DPI로 설정되어 있는 경우

HDPI화면에서 UI가 이상하게 보이거나 실행이 안될경우가 있는데

이 경우에는 Winform의 속성중에서 AutoCaleMode를 None로 바꾸면 된다.

특히 글자가 섞여있는 사용자정의 컨트롤을 픽셀단위로 맞췄는데 폰트나

DPI에 따라서 변경되면 프로그램의GUI는 망가지게 되어 있다. 

폰트에 관련되어 있게 설정하면 사용자가 노트북등에서 125%로 확대해서 

본다던가 영문판 OS에서 실행 한다던가 하면 글자가 틀어짐으로 인해서

위와같은 오류가 발행할수 있다.


다음은 해당속성에 대한 내용이다.


[BrowsableAttribute(false)]
public AutoScaleMode AutoScaleMode { get; set; }


Dpi: 디스플레이 해상도를 기준으로 스케일제어
Font: 시스템의 글꼴에서 사용하는 크기를 기준으로 스케일제어
Inherit: 부모의 크기조정모드에서 따라 크기를 제어(부모가 없는경우 사용할수 없음)
None: 자동 스케일링 사용하지 않음 


그냥 확대 배율에 따라 알아서 모든 컨트롤들이 커지면 되는데.. 그런건 안된다.. 그래서 특정 컨트롤의 크기를 규정할때 dpi스케일의 배율을 미리 계산해서 일괄적용하거나 hdc에서 특정 폰트를 기반으로 measure string을 처리한 결과 size를 기준으로 크기를 결정하면 된다..

댓글 없음:

댓글 쓰기