MFC中Edit控件垂直滚动条时,当文本超出时再显示垂直滚动条

现在我需要实现这样一个功能:

     想要用edit控件本身的滚动条,并且设置该属性,但是该滚动条会一直存在。效果如下图,很是难看,当没有输入信息时,也会出现垂直滚动条

其实,只有在文本超过设定的区域内才会显示(在这我不知道如何上传动态效果图片,所以只有代码展示了)

第一步:对于控件属性的设置

Multiline = True

Auto HScroll = False

Auto VScroll = True

Vertical Scroll = True

第二步:重写PreSubclassWindow()这个函数

virtual void PreSubclassWindow();
void CMyEdit::PreSubclassWindow()
{
	//如果用户设置了  垂直滚动条  ,隐藏属性,只有超出时才会显示
	if(GetStyle() & WM_VSCROLL)
	{
		this->ShowScrollBar(SB_VERT , FALSE);
	}
	CEdit::PreSubclassWindow();
}

第三步:重写OnKeyUp消息。

因为当用户按下键盘时,才会输入内容,根据输入的行数判断是否超出控件的高度,才会触发滚动条消息

CStringW   StrLog;
//第一步:获取文本的行数
int nLineCount = GetLineCount();
//获取字体的高度、宽度
CFont  *font = this->GetFont();
LOGFONT lf;
font->GetLogFont(&lf);
int TextHeight = lf.lfHeight;
TextHeight < 0 ? -TextHeight : TextHeight;

//获取控件自身的高度、宽度
CRect   rectEdit;
this->GetRect(rectEdit);
int  editHeight = rectEdit.Height();

//当输入的高度 > 控件高度   触发滚动条
if (editHeight < TextHeight*nLineCount)
{
	this->ShowScrollBar(SB_VERT , TRUE);
}
else
	this->ShowScrollBar(SB_VERT , FALSE);

这样子就设置好了。

我曾尝试要设置水平滚动条。但是 ,我发现了一个问题,我获取到了字符串总体的宽度与edit控件的宽度不在一个层面上。就是说,我获取的是物理宽度,但是edit控件上显示的是像素宽度。目前我是没有解决这个问题。如果我解决了,会更新给大家。哈

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糯诺诺米团

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值