MFC 重载CEdit文本框 “垂直居中”

在MFC中CEdit控件的对齐方式只有 左、右对齐,居中对齐,但是没有垂直居中对齐,对于单行的CEdit来说,例如 字体高度是 30px,而CEdit有30px的话,那么我们输入的字体就会过于偏上,很是影响美观(如图:)

解决方案:将字体的输出位置往下偏移一定的位置就OK了,这里提供的偏移方法是将CEdit的工作区域往下偏移,
所谓的工作区域也就是能够显示字体的区域.
代码如下:


①、在创建CEdit的时候 添加 多行的属性,ES_MULTILINE,因为对于单行的CEdit是不能设置工作区域的,我们设置了多行,但是如果禁止了 滚动条,禁止换行,那么看起来其实还是 一行~

1

2

3

4

5

6

//CDemoEdit继承于CEdit(CDemoEdit : public CEdit)

 //创建一个 CDemoEdit

  CDemoEdit* m_pDemoEdit = new CDemoEdit();

  //设置的风格是多行的,禁止滚动|换行

  m_pDemoEdit->Create(ES_AUTOHSCROLL|ES_LEFT|WS_VISIBLE|ES_MULTILINE|ES_WANTRETURN,

                      CRect(88,28,225,51),this,ID_KEY);

②、将CEdit的工作区域往下偏移,这样看起来就好像是单行居中了地方

        

1

        //下面的这些代码是在类CDemoEdit中完成的,所以直接使用的是GetClientRect

1

2

3

4

5

6

7

8

9

10

11

12

13

        CRect rc; 

        //获取 工作区域的位置RECT<span id="2_nwp" style="width: auto; height: auto; float: none;"><a id="2_nwl" href="http://cpro.baidu.com/cpro/ui/uijs.php?c=news&cf=1001&ch=0&di=128&fv=16&jk=d0d069887be0fb7a&k=%D0%C5%CF%A2&k0=%D0%C5%CF%A2&kdi0=0&luki=3&n=10&p=baidu&q=80007180_cpr&rb=0&rs=1&seller_id=1&sid=7afbe07b8869d0d0&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1925163&u=http%3A%2F%2Fwww%2Eyouranshare%2Ecom%2Fblog%2Fsid%2F19%2Ehtml&urlid=0" target="_blank" mpid="2" style="text-decoration: none;"><span style="color:#0000ff;font-size:16px;width:auto;height:auto;float:none;">信息</span></a></span>

        GetClientRect(&rc);

        TEXTMETRIC tm;

        pDC->GetTextMetrics(&tm);

        //获取字体的高度

        int nFontHeight = tm.tmHeight + tm.tmExternalLeading;

        //计算字体输入的位置,也就是距离顶部的距离

        int offY = (rc.Height()-nFontHeight) / 2;

        //将工作区域往下偏移~~

        rc.OffsetRect(0,offY);

        //OK 设置 工作区域

        SetRectNP(&rc);

 


修改后的状态

 

 字体的输出位置往下偏移了,对于只有一行的MULTILINE 来说,看起来就是 一行~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值