网站已经改版为Wordpress版本,这里是旧版本的快照,请不要在页面中留言.

【MFC】单行CEdit文本的“垂直居中”


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

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


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

//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的工作区域往下偏移,这样看起来就好像是单行居中了地方

        

        //下面的这些代码是在类CDemoEdit中完成的,所以直接使用的是GetClientRect
        CRect rc; 
        //获取 工作区域的位置RECT信息
        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 来说,看起来就是 一行~~


版权申明:本文由 悠然品鉴 整理,转载请注明出处:http://www.youranshare.com/blog/sid/19.html



  • 标签:
  • MFC
  • CEdit垂直居中
网站已经改版为Wordpress版本,这里是旧版本的快照,请不要在页面中留言.