2010-05-18 6 views
9

텍스트 상자가있는 응용 프로그램이 있고 화면의 텍스트 상자 너비는 항상 사용자 화면에서 17.5cm가되어야합니다.텍스트 상자에 17,5 cm의 고정 너비를 지정하는 방법은 무엇입니까?

const double centimeter = 17.5; // the width I need 
const double inches = centimeter * 0.393700787; // convert centimeter to inches 

float dpi = GetDpiX(); // get the dpi. 96 in my case. 

var pixels = dpi*inches; // this should give me the amount of pixels 
textbox1.Width = Convert.ToInt32(pixels); // set it. Done. 



private float GetDpiX() 
{ 
    floar returnValue; 
    Graphics graphics = CreateGraphics(); 
    returnValue = graphics.DpiX; 
    graphics.Dispose(); // don’t forget to release the unnecessary resources 
    return returnValue; 
} 

그러나 이것은 나에게 다른 해상도를 가진 다른 크기를 제공합니다

이것은 내가 지금까지 시도 것입니다.

그것은 1024 X 768으로 1,680 1,050 X21,5 cm을 13 cm을 준다.

내가 뭘 잘못하고 있니?

+4

"화면의 텍스트 상자는 항상 사용자 화면에서 17.5cm가되어야합니다." - 그게 특이한 요구 사항입니다 .... –

+0

그래 ... 맞아. 당신의 의뢰인이 당신에게이 요구 사항을 주었다면, 그는 그 사람에게 '지각 (tard)'이라고 말하십시오. – mpen

+1

이상한 요구 일지 모르지만 재미있는 질문은 없습니다. 수동으로 화면 해상도를 설정하고 수동으로 DPI를 계산하고 GetDpiX() 및 GetDpiY()의 출력과 일치하는지 확인하는 방법은 무엇입니까? 모든 모니터가이 기능을 지원하지 않을 수도 있습니다. – Bryan

답변

7

메서드 graphics.DpiX는 모니터의 실제 인치 수를 제공하지 않습니다. Windows 디스플레이 속성에 설정된 DPI를 반환하며 대개 96 또는 120 DPI 중 하나입니다.

모니터의 실제 DPI를 읽을 수 없습니다. 마이크로 소프트는 Windows Vista/7에서 이것을 연구했지만, 모니터 제조사가 모니터 하드웨어에서 값을 읽을 수있는 표준 방법을 제공하지 않는다면 불가능할 것입니다.

3

예, 불행히도 제난은 옳습니다. 사용자가 일종의 손으로 교정 할 수있는 문제를 해결하려면 문제가 있습니다.

화면에 400 픽셀의 선을 그리고 사용자에게 화면에서 측정하고 결과를 설정하도록 요청합니다. 이제 캘리브레이션 인 PPI (인치당 픽셀 수)를 계산하는 것이 정말 간단합니다.

0

크기 구조의 너비 속성은 Graphics 클래스의 PageUnit 및 PageScale 설정에 따라 다릅니다. 원하는 효과를 얻으려면이 설정으로 놀아보십시오. 컨트롤의 Paint 이벤트에서 이러한 설정을 수정해야 할 가능성이 높으므로 대신 사용자 지정 TextBox 컨트롤을 만드는 것이 좋습니다.

관련 문제