Как получить интервал между символами, распечатанными с помощью TextOut?

Я пробую к calcuate размеру каждой ячейки (содержащий текст как "и следующие" или "a0"), так, чтобы 32 ячейки вписались в окно шириной. Однако charWidth*2 doesn' представляет ширину ячейки, так как это не берет интервал между символами в учетной записи.

Как я могу получить размер шрифта так, чтобы 32 ячейки каждый был двумя символами как "и следующие" соответствие точно в клиентскую область окна?

Курьер является шрифтом фиксированной ширины.

RECT rect;
::GetClientRect( hWnd, &rect );
LONG charWidth = (rect.right-rect.left)/BLOCK_SIZE/2-2;
int oldMapMode = ::SetMapMode( hdc, MM_TEXT );
HFONT font = CreateFont( charWidth*2, charWidth, 0, 0, FW_DONTCARE, FALSE,
    FALSE, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS, CLIP_DEFAULT_PRECIS,
    CLEARTYPE_QUALITY, FF_ROMAN, _T("Courier") );
HGDIOBJ oldFont = ::SelectObject( hdc, font );

for( int i = 0; i < BLOCK_SIZE; ++i )
{
    CString str;
    str.Format( _T("%.2x"), (unsigned char)*(g_memAddr+i) );
    SIZE size;
    ::TextOut( hdc, (size.cx+2)*i+1, 1, str, _tcslen((LPCTSTR)str) );
}
1
задан MSalters 26 May 2010 в 11:03
поделиться

3 ответа

1
ответ дан 3 September 2019 в 00:18
поделиться

Похоже, что вам нужна измеренная разница в ширине строки между двухсимвольной и четырехсимвольной строкой.

0
ответ дан 3 September 2019 в 00:18
поделиться

Также смотрите GetTextMetrics

1
ответ дан 3 September 2019 в 00:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: