【问题标题】:How to get spacing between characters printed using TextOut?如何获得使用 TextOut 打印的字符之间的间距?
【发布时间】:2023-03-27 11:15:01
【问题描述】:

我正在尝试计算每个单元格的大小(包含“ff”或“a0”之类的文本),以便 32 个单元格按宽度适合窗口。 但是,charWidth*2 不代表单元格的宽度,因为它不占用帐户中字符之间的间距。

我怎样才能获得字体的大小,以便每个 32 个单元格是两个像“ff”这样的字符完全适合窗口的客户区?

Courier 是固定宽度字体。

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) );
}

【问题讨论】:

标签: c++ programming-languages winapi


【解决方案1】:
【解决方案2】:

【讨论】:

    【解决方案3】:

    您似乎想要测量两个字符和四个字符的字符串之间的字符宽度差异。

    【讨论】:

    • 我想知道字符之间的间距宽度之前我为字体指定宽度。
    猜你喜欢
    • 2017-04-20
    • 2019-11-15
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    相关资源
    最近更新 更多