가 주어진 글꼴 마이크로 소프트의 ClearType-optimized fonts 중 하나인지 확인하는 방법이 있나요?
상대적으로 짧은 목록이기 때문에 글꼴 이름 목록을 간단히 하드 코딩 할 수 있습니다.하지만보기에는 약간 엉망입니다. Windows의 로켈 및 언어 설정에 관계없이 글꼴 이름이 동일합니까?
배경 :
PuTTY 굵게, ClearType을 지원, Consolas 텍스트 정말 추한 보인다. 내가 문제를 알아낼 수 있다면 소스와 함께 놀러와보기로 결정하고 난 다음 (약칭 함) 코드를 아래로 추적 생각 :
이font_height = cfg.font.height;
if (font_height > 0) {
font_height =
-MulDiv(font_height, GetDeviceCaps(hdc, LOGPIXELSY), 72);
}
}
font_width = 0;
#define f(i,c,w,u) \
fonts[i] = CreateFont (font_height, font_width, 0, 0, w, FALSE, u, FALSE, \
c, OUT_DEFAULT_PRECIS, \
CLIP_DEFAULT_PRECIS, FONT_QUALITY(cfg.font_quality), \
FIXED_PITCH | FF_DONTCARE, cfg.font.name)
f(FONT_NORMAL, cfg.font.charset, fw_dontcare, FALSE);
SelectObject(hdc, fonts[FONT_NORMAL]);
GetTextMetrics(hdc, &tm);
font_height = tm.tmHeight;
font_width = tm.tmAveCharWidth;
f(FONT_BOLD, cfg.font.charset, fw_bold, FALSE);
의도가 맞는 굵은 글꼴을 선택하는 것입니다 일반 글꼴과 동일한 치수 나는 Consolas가 특정 픽셀 경계에서 레이아웃되도록 매우 최적화되어 있기 때문에 PuTTY의 Consolas 텍스트가보기 흉하게 보일 것이라고 생각합니다. 임의의 크기로 구h 주려고하면 나쁜 결과가 나옵니다.
그래서 ClearType 최적화 된 글꼴을 감지하고 초기 CreateFont 호출과 동일한 너비와 높이를 사용하여 해당 글꼴의 굵게 버전을 만드는 것이 적절한 해결책 인 것 같습니다.
"(약식)"코드는 windows \ window.c의 단순화 된 버전입니다. 분석은 기본적으로 내 것과 같습니다. PuTTY의 로컬 복사본에 대한 해결 방법은 글꼴 이름이 Consolas 인 경우 글꼴 너비에 0을 전달하는 것입니다. (밑줄 친 글꼴도 엉망이 될 수 있습니다, 나는 당신의 픽스가 그것들을 처리하지 못할 것이라고 생각합니다.) –
이 힌트를 가져 주셔서 감사합니다. 또한이 코드 영역까지 문제를 추적하고 끝에 CreateFont를 비난했습니다. 이제 글꼴 너비가 0 (1421 줄)으로 전달되도록 코드를 변경 했으므로 예상 한만큼 좋은 것으로 보입니다. 자동으로 추가 및 좁은/와이드 글꼴 (비록 본적이없는) 처리하기 위해 1596 줄 전에 font_width 같으면 x x 0으로 재설정합니다. 유사한 고정 너비 글꼴을 사용하여 오류를 찾을 수 없습니다. – ygoe