如何获取CEdit控件的实际行数

问题描述 投票:0回答:1

我正在尝试将垂直滚动条添加到我的

CEdit
继承的控件中,该控件仅在需要时才出现。我使用的明显策略是确定文本高度是否大于控件的高度。我在here和SO post中找到了一些此类任务的示例有什么方法可以检索CEditBox内文本的文本高度(以像素为单位)?。在这两个示例中,文本的高度均确定为
linesCount * lineHeight
。但是我有一个不包含换行符的文本,例如:

CString text = L"Hello Hello Hello /*few more times*/ Hello Hello Hello";

在这种情况下,

CEdit::GetLinesCount
方法始终返回
1
,尽管它有
ES_MULTILINE
样式选项(并且水平滚动条关闭)。那么,如何判断是否需要垂直滚动条呢?

c++ winapi mfc
1个回答
0
投票

在 IInspectable 的提示下,我最终使用了

DrawText
方法,但是至少我的变体并不精确 - 它给出了实际需要的更大高度:

void ScrollEdit::CheckVerticalScrolling()
{
    CString text;
    GetWindowText(text);

    CClientDC dc { this };
    CRect     rect;
    GetClientRect(&rect);
    int r =
        DrawText(dc.GetSafeHdc(), text, text.GetLength(), &rect, DT_CALCRECT | DT_EDITCONTROL | DT_WORDBREAK);
    GetWindowRect(&rect);

    ShowVertScrollBar(r > rect.Height());
}
© www.soinside.com 2019 - 2024. All rights reserved.