• 单行编辑框文本垂直居中(包含计算字体高度)


    单行编辑框文本垂直居中(包含计算字体高度)

    有时为了界面更漂亮,使用高度比较高的编辑框,但单行文本的编辑框文字是靠上显示的,反而不美观了,使文本垂直居中有两种方法:

    1. 属性设为多行,不接收换行,然后计算中间位置,使用SetRect设置到文本位置(注意OnSize还要处理)

    可在Create、OnCreate、PreSubClass里处理

    2. 响应WM_NCCALCSIZE修改客户区居中,通过获取字体高度计算

    1. void CEditEx::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp)  
      {  
       TRACE("Enter %s\n", __FUNCTION__);  
        
       CString cstrText(_T("字体test"));  
       SIZE sz;  
       GetTextExtentPoint32(GetDC()->GetSafeHdc(), cstrText, cstrText.GetLength(), &sz);  
         
       int nBorder = (lpncsp[0].rgrc->bottom - lpncsp[0].rgrc->top - sz.cy) / 2;  
       if(nBorder < 0)  
        nBorder = 0;  
       lpncsp[0].rgrc->top += nBorder;  
       lpncsp[0].rgrc->bottom -= nBorder;  
        
       CEdit::OnNcCalcSize(bCalcValidRects, lpncsp);  
      } 

     

    两种方法都要用到计算字体高度,有3个函数可以使用:

    GetTextExtentPoint32
    GetTextExtent
    GetTextMetrics

     
          CDC*   pDC=GetDC();     
          TEXTMETRIC   tm;     
          pDC->GetTextMetrics(&tm);     
          int   nHeight=tm.tmHeight+tm.tmExternalLeading;     
          int   nWidth=tm.tmAveCharWidth; 
  • 相关阅读:
    2
    网络对抗第四次实验恶意代码
    网络对抗第三次实验
    网络对抗第二次实验
    网络攻防第一次实验
    123
    数据结构
    第五次实验
    第二次实验
    Qt应用笔记
  • 原文地址:https://www.cnblogs.com/Dageking/p/2959339.html
Copyright © 2020-2023  润新知