2012-02-21 3 views
37

사용자가 125 % 또는 150 %를 선택할 때까지 완벽하게 작동하는 응용 프로그램을 만들었습니다. 내 신청서가 깨질 수 있습니다. 나중에 DPI를 감지하여 글꼴 크기를 찾는 방법을 찾았습니다.Windows 글꼴 크기 감지 (100 %, 125 %, 150 %)

중국 버전의 Windows 7 사용자가 내 응용 프로그램을 사용하기 전까지는 훌륭하게 작동했습니다. 전체 응용 프로그램이 중국어 윈도우 7에서 중단됩니다. 중국어 문자는 내 응용 프로그램을 손상시키는 기묘한 DPI를 일으키는 것으로 나타났습니다. (실제로 영어 버전 만 설치하고 언어 팩을 설치하면 문제가 발생하지 않습니다.)

내 현재 코드는 다음과 같이 작동합니다 : 위대한 작품을 윈도우 7의 영어 버전에

if (dpi.DpiX == 120) //For 125% fonts 
{ 
    //Resize form and set default font to correct problems 
} 
else if (dpi.DpiX == 96) //For 100 and 150% fonts 
{ 
    //Resize form and set default font to correct problems 
} 

을하지만, 어떻게 든 중국어 버전이로 바로 건너 뛰고 형태도 표시되지 컨트롤 자체를 파괴, 글꼴이 너무 커서 문제를 지나치게 밀고 그림 상자를 이동합니다.

그렇다면 API를 감지하지 않고 Windows 글꼴 크기 (100 %, 125 % 및 150 %)를 감지하는 좋은 방법은 무엇입니까? 나는 모든 창문 7 운영체제와 언어에서 작동 할 수있는 무언가가 필요하다.

+0

정말 빠르게 타이핑하고 몇 가지 맞춤법 오류를 만들었습니다. 나는 "API"가 아니라 "DPI"라고 말하려고했다. 죄송합니다 –

+0

당신이 묘사하는 것이 비디오 드라이버 및/또는 설치된 글꼴의 문제와 훨씬 비슷하게 들립니다 ... – Yahia

+0

중국 고객의 만족도가 높으면 가상 머신을 만들기 위해 시간을 투자 할 가치가 있습니다. 'VirtualBox' 또는'VmWare'를 사용하여 실제 OS와 가장 가까운 fedelity로 앱을 테스트 할 수 있습니다. – Tigran

답변

16

가변 DPI 설정을 처리하는 올바른 방법은 감지하고 switch 문에서 컨트롤의 크기를 수동으로 조정하지 않는 것입니다 (처음에는 if 샘플에 표시하는 것보다 훨씬 더 가능성이 있습니다).

대신 양식의 AutoScaleMode propertyAutoScaleMode.Dpi으로 설정하고 프레임 워크에서 처리하도록해야합니다.

은 폼의 생성자에 다음 코드를 추가 (또는 디자인 타임에이 속성을 설정) :

this.AutoScaleMode = AutoScaleMode.Dpi; 

당신이 AutoScaleMode.Font를 사용하는 것을 선호 수도 있지만. 자동 크기 조정에 대한 자세한 내용은 the MSDN documentation을 참조하십시오.

+1

그 일을 시도했지만 문제는 내 응용 프로그램이 그걸로 엉망이되었습니다. –

+1

@user "엉망"이란 무슨 뜻입니까? 정확히 무엇이 잘못 되었습니까? 어떻게 디버깅을 시도 했습니까?콘테이너에 배치하고'Anchor'와'Dock' 속성을 설정하는 것과 같이 컨트롤에 상대적인 위치 지정을 사용합니까? 사용자가 기본 글꼴/크기를 변경하더라도 절대 위치 지정이 작동하지 않으며 DPI가 포함될 때보 다 훨씬 적습니다. –

+8

AutoScaleMode.none을 사용하여 내 문제를 해결했습니다! –

5

C++/Win32 사용자의 경우 여기에 참조 번호 인 Writing High-DPI Win32 Applications이 있습니다.

+0

다음은 참조 용 비트입니다. http://technet.microsoft.com/en-us/library/dn528846.aspx –