我正在尝试将垂直滚动条添加到我的
CEdit
继承的控件中,该控件仅在需要时才出现。我使用的明显策略是确定文本高度是否大于控件的高度。我在here和SO post中找到了一些此类任务的示例有什么方法可以检索CEditBox内文本的文本高度(以像素为单位)?。在这两个示例中,文本的高度均确定为 linesCount * lineHeight
。但是我有一个不包含换行符的文本,例如:
CString text = L"Hello Hello Hello /*few more times*/ Hello Hello Hello";
在这种情况下,
CEdit::GetLinesCount
方法始终返回 1
,尽管它有 ES_MULTILINE
样式选项(并且水平滚动条关闭)。那么,如何判断是否需要垂直滚动条呢?
在 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());
}