2013-04-10 6 views
0

주어진 글꼴 (예 : Arial)에서 문자의 너비를 가져와야합니다. 공백없이 테두리 상자의 너비 만.글꼴의 문자 너비 가져 오기

HFONT font = CreateFont(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, L"Arial"); 

만든 HFONT를 사용하면이 정보를 추출 할 수있는 방법이 있습니까?

int MyGetCharWidth(HFONT font, wchar_t wch) 
{ 
    // How to implement this? 
} 

답변

2

GetCharABCWidths을하지만 그것은 커닝에 대해 말하지 않을 것을 알고, 그래서하거나 정보와 함께 할 계획 내용에 따라 유용하지 않을 수도 있습니다.

실제 텍스트 문자열의 너비를 원하는 경우 GetTextExtentPoint32과 같은 몇 가지 기능이 측정됩니다. 이러한 기능에는 커닝 수정 기능이 포함됩니다.

+0

간격없이 한 문자의 경계 상자 너비 만 필요합니다. 그 기능은 HFONT가 아닌 HDC가 필요합니다. 그 이유는 무엇입니까? – sashoalm

+0

장치 컨텍스트로 글꼴을 선택한 다음 텍스트를 측정하도록 선택한 함수를 호출해야합니다. 이유는 텍스트를 표시 할 특정 장치에 따라 답이 달라지기 때문입니다. 디스플레이 장치의 해상도 및 기능과 같은 것들이 대답에 영향을 미칠 수 있습니다. 화면의 10 점 Arial "X"는 화면이나 프린터의 크기와 약간 다를 수 있습니다. –

1

이 작업을 수행해야합니다

: 예를 들어,

HFONT font = CreateFont(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, L"Arial"); 

당신은 매개 변수의 일부 null 이외의 값을에서 지정할해야합니다 BTW이 이해가되지 않습니다

int MyGetCharWidth(HFONT font, wchar_t wch) 
{ 
    HDC hDC = GetDC(NULL) ; 
    HGDIOBJ oldfont = SelectObject(hDC, font) ; 

    RECT rect ; 
    DrawText(hDC, &wch, 1, &rect, DT_CALCRECT|DT_NOPREFIX) ; 

    SelectObject(hDC, oldfont) ; 
    return rect.right - rect.left ; 
} 

CreateFont(fontsize, 0, 0, 0, FW_NORMAL, 0, 0, 0, 
          DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, 
          CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, 
          DEFAULT_PITCH, "Arial");