MFC中edit控件中实现文字垂直居中

版权声明:本文为博主原创文章,如需转载请注明出处 https://blog.csdn.net/bajianxiaofendui/article/details/82778609

MFC中edit控件中文字不能垂直居中问题解决


     mfc中的edit控件只有水平居中的属性可以设置,垂直居中没有提供接口,但是我们可以通过发送EM_SETRECT改变edit的有效区域来达到文字垂直居中的效果,直接上代码:

CRect rcEdit;
m_edit.GetClientRect(&rcEdit);
TEXTMETRIC tm;
m_edit.GetDC()->GetTextMetrics(&tm);
int nFontHeight = tm.tmHeight + tm.tmExternalLeading;
int nOffY = (rcEdit.Height() - nFontHeight) / 2;
::OffsetRect(&rcEdit, 0, nOffY);
::SendMessage(m_edit.m_hWnd, EM_SETRECT, 0, (LPARAM)&rcEdit);

     原理很简单,主要是获取到edit控件当前dc中的字体高度,然后计算出文字居中应该处于的高度,然后重新设置edit控件有效区域。注意:当前应用场景都是针对于edit中的单行文字而言,而且还需要将edit控件的多行属性设置为true,原因是因为EM_SETRECT仅仅针对于多行编辑控件有效,MSDN上介绍如下:
在这里插入图片描述
(设置多行编辑控件的格式化矩形。格式化矩形是控件绘制文本的限制矩形。限制矩形与编辑控制窗口的大小无关。此消息仅由多行编辑控件处理。您可以将此消息发送到编辑控件或富编辑控件)

猜你喜欢

转载自blog.csdn.net/bajianxiaofendui/article/details/82778609
今日推荐