duilib进阶教程 -- Label控件的bug (8)

  上个教程说到了TreeView的文字不能垂直居中的问题,而咱们用LabelUI实际上是能够垂直居中的,为何不说是TreeView的bug,而说是Label控件的bug呢?由于影响TreeView垂直居中的就是Label,能够发现LabelUI的【属性列表.XML】里有valign属性,而代码里却找不到,是由于valign属性被合并到align属性里去了,只要设置align="center"就能够水平垂直都居中,可是想要垂直居中,水平左对齐啥的,就犯难了,所以这里须要将两个属性分开,valign管垂直,align管水平,这样想要怎么组合都OK啦。css

  将CLabelUI::SetAttribute函数里if( _tcscmp(pstrName, _T("align")) == 0 ) 那一段代码改为下面这样便可。(记得从新编译duilib哦~)函数

        if( _tcscmp(pstrName, _T("align")) == 0 ) {
            if( _tcsstr(pstrValue, _T("left")) != NULL ) {
                m_uTextStyle &= ~(DT_CENTER | DT_RIGHT | DT_SINGLELINE);
                m_uTextStyle |= DT_LEFT;
            }
            if( _tcsstr(pstrValue, _T("center")) != NULL ) {
                m_uTextStyle &= ~(DT_LEFT | DT_RIGHT );
                m_uTextStyle |= DT_CENTER;
            }
            if( _tcsstr(pstrValue, _T("right")) != NULL ) {
                m_uTextStyle &= ~(DT_LEFT | DT_CENTER | DT_SINGLELINE);
                m_uTextStyle |= DT_RIGHT;
            }
        }
        else if( _tcscmp(pstrName, _T("valign")) == 0 ) {
            if( _tcsstr(pstrValue, _T("top")) != NULL ) {
                m_uTextStyle &= ~(DT_BOTTOM | DT_VCENTER);
                m_uTextStyle |= (DT_TOP | DT_SINGLELINE);
            }
            if( _tcsstr(pstrValue, _T("vcenter")) != NULL ) {
                m_uTextStyle &= ~(DT_TOP | DT_BOTTOM );            
                m_uTextStyle |= (DT_VCENTER | DT_SINGLELINE);
            }
            if( _tcsstr(pstrValue, _T("bottom")) != NULL ) {
                m_uTextStyle &= ~(DT_TOP | DT_VCENTER);
                m_uTextStyle |= (DT_BOTTOM | DT_SINGLELINE);
            }
        }

  嗯,实现了垂直居中的效果后,如今貌似和迅雷如出一辙啦?ui

  NO,NO,NO,下一节将会继续介绍~O(∩_∩)O~spa



相关文章
相关标签/搜索