Я пытаюсь вычислить размер каждой ячейки (содержащей текст типа «ff» или «a0»), чтобы 32 ячейки помещались в окно по ширине.
Тем не менее, charWidth * 2 не представляет ширину ячейки, поскольку она не занимает промежуток между символами в учетной записи.
Как я могу получить размер шрифта, чтобы каждая из 32 ячеек равнялась двум символам типа "ff", точно вписывающимся в клиентскую область окна?
Курьером является шрифт фиксированной ширины .
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) );
}