GDI를 사용하여 글꼴을 만드는 일반적인 방법은 다음과 같이 원하는 포인트 크기와 대상 장치의 세로 해상도 (DPI)를 사용하는 것입니다.다른 방향에서 글꼴 높이를 어떻게 지정합니까?
LOGFONT lf = {0};
lf.lfHeight = -MulDiv(point_size, GetDeviceCaps(hdc, LOGPIXELSY), 72);
...
HFONT hfont = CreateFontIndirect(&lf);
기본 MM_TEXT
매핑 모드를 가정하면이 방법으로 point_size가 픽셀 높이 원하는 장치 용. (이것은 일반적인 근사값이며 실제로는 72.27 인치가 아니라 72 인치입니다.) (마이너스 기호는 셀 높이가 아닌 실제 문자 높이를 지정한다는 의미입니다.)
옆쪽 글꼴 - 즉 방향 및 90도 이스케이프가있는 글꼴 - LOGPIXELSY
대신 LOGPIXELSX
을 사용합니까? 내가 목표로 삼고있는 프린터 중 일부는 수평 해상도와 수직 해상도가 다릅니다.
일반적으로 theta
의 각도를 원한다면 LOGPIXELSX
와 LOGPIXELSY
를 결합합니까? 나는 이런 식으로 생각하고있어 :
// Given theta in degrees (e.g., theta = 45.0) ...
double theta_radians = theta * 2.0 * pi/360.0;
int dpi = static_cast<int>(GetDeviceCaps(hdc, LOGPIXELSX) * sin(theta_radians) +
GetDeviceCaps(hdc, LOGPIXELSY) * cos(theta_radians) +
0.5);
LOGFONT lf = {0};
lf.lfHeight = -MulDiv(point_size, dpi, 72);
// Set escapement and orientation to theta in tenths of a degree.
lf.lfEscapement = lf.lfOrientation = static_cast<LONG>(theta * 10.0 + 0.5);
...
이것은 직관적 인 의미가 있지만 실제로 GDI 글꼴 매퍼 및 프린터 드라이버가 작동하는지 궁금해.
실제로이 코드를 그런 프린터에서 사용해 보셨습니까? 당신은 당신이 얻는 어떤 해결책을 시험하고 싶을 것이다, 맞죠? –
결과는 프린터마다 다르므로 드라이버가 버그가있는 것으로 추정됩니다. 나는 그것이 어떻게 작동하도록되어 있는지 궁금합니다. –