From c275b61e6e77bba5534f4cea81a4289ea35c0813 Mon Sep 17 00:00:00 2001 From: Troy <656067418@qq.com> Date: Tue, 18 Aug 2015 16:24:15 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1、修正List横向滚动条失效的问题; 2、Label增加wordbreak自动换行控制属性; 3、增加Gif使用的演示例子; 4、增加List添加数据的演示例子; --- Demos/duidemo/MainWnd.h | 13 +- DuiLib/Control/UILabel.cpp | 398 +++--------------------------------- DuiLib/Control/UILabel.h | 54 +---- DuiLib/Control/UIList.cpp | 43 ++-- DuiLib/Control/UIList.h | 4 +- DuiLib/Core/UIContainer.cpp | 101 +++------ DuiLib/Core/UIContainer.h | 2 - DuiLib/Core/UIControl.cpp | 1 + bin/skin/duidemo/gifani.gif | Bin 0 -> 52565 bytes bin/skin/duidemo/main.xml | 38 +++- 10 files changed, 124 insertions(+), 530 deletions(-) create mode 100644 bin/skin/duidemo/gifani.gif diff --git a/Demos/duidemo/MainWnd.h b/Demos/duidemo/MainWnd.h index 1e0e927f..bbd34a48 100644 --- a/Demos/duidemo/MainWnd.h +++ b/Demos/duidemo/MainWnd.h @@ -24,7 +24,7 @@ class CDemoFrame : public WindowImplBase, public CWebBrowserEventHandler, public CWebBrowserUI* pBrowser2 = static_cast(m_PaintManager.FindControl(_T("oneclick_browser2"))); pBrowser2->SetWebBrowserEventHandler(this); pBrowser1->NavigateUrl(_T("http://blog.csdn.net/duisharp")); - pBrowser2->NavigateUrl(_T("http://www.2345.com/?kms656067418")); + pBrowser2->NavigateUrl(_T("https://github.com/duisharp/DuiLib_Ultimate")); CComboUI* pFontSize = static_cast(m_PaintManager.FindControl(_T("font_size"))); if(pFontSize) @@ -35,6 +35,17 @@ class CDemoFrame : public WindowImplBase, public CWebBrowserEventHandler, public pElement->SetFixedWidth(120); pFontSize->Add(pElement); } + + CListUI* pList = static_cast(m_PaintManager.FindControl(_T("listview"))); + for(int i = 0; i < 20; i++) + { + CListTextElementUI* pItem = new CListTextElementUI(); + pItem->SetFixedHeight(30); + pList->Add(pItem); + pItem->SetText(0, _T("")); + pItem->SetText(1, _T("1000")); + pItem->SetText(2, _T("100")); + } } virtual BOOL Receive(SkinChangedParam param) diff --git a/DuiLib/Control/UILabel.cpp b/DuiLib/Control/UILabel.cpp index 48e38277..2ffb66bb 100644 --- a/DuiLib/Control/UILabel.cpp +++ b/DuiLib/Control/UILabel.cpp @@ -4,54 +4,17 @@ #include namespace DuiLib { - - //Color _MakeRGB(int a, Color cl) - //{ - // return Color(a, cl.GetR(), cl.GetG(), cl.GetB()); - //} - - //Color _MakeRGB(int r, int g, int b) - //{ - // return Color(255, r, g, b); - //} - - CLabelUI::CLabelUI() : m_uTextStyle(DT_VCENTER), m_dwTextColor(0), + CLabelUI::CLabelUI() : m_uTextStyle(DT_VCENTER | DT_SINGLELINE), m_dwTextColor(0), m_dwDisabledTextColor(0), m_iFont(-1), m_bShowHtml(false), - - m_EnableEffect(false), - m_gdiplusToken(0), - //m_TextRenderingHintAntiAlias(TextRenderingHintSystemDefault), - m_TransShadow(60), - m_TransText(168), - m_TransShadow1(60), - m_TransText1(168), - m_hAlign(DT_LEFT), - m_vAlign(DT_CENTER), - m_dwTextColor1(-1), - m_dwTextShadowColorA(0xff000000), - m_dwTextShadowColorB(-1), - m_GradientAngle(0), - m_EnabledStroke(false), - m_TransStroke(255), - m_dwStrokeColor(0), - m_bAutoCalcWidth(false), - m_EnabledShadow(false), - m_GradientLength(0) + m_bAutoCalcWidth(false) { - //m_ShadowOffset.X = 0.0f; - //m_ShadowOffset.Y = 0.0f; - //m_ShadowOffset.Width = 0.0f; - //m_ShadowOffset.Height = 0.0f; - //GdiplusStartup( &m_gdiplusToken,&m_gdiplusStartupInput, NULL); - ::ZeroMemory(&m_rcTextPadding, sizeof(m_rcTextPadding)); } CLabelUI::~CLabelUI() { - // GdiplusShutdown( m_gdiplusToken ); } LPCTSTR CLabelUI::GetClass() const @@ -135,10 +98,8 @@ namespace DuiLib SIZE CLabelUI::EstimateSize(SIZE szAvailable) { - if (m_bAutoCalcWidth) - { + if (m_bAutoCalcWidth) { RECT rcText = {0}; - CRenderEngine::DrawText(m_pManager->GetPaintDC(), m_pManager, rcText, m_sText, m_dwTextColor, m_iFont, DT_CALCRECT | m_uTextStyle); m_cxyFixed.cx = rcText.right - rcText.left + m_rcTextPadding.left + m_rcTextPadding.right; } @@ -203,6 +164,16 @@ namespace DuiLib else if( _tcscmp(pstrName, _T("endellipsis")) == 0 ) { if( _tcscmp(pstrValue, _T("true")) == 0 ) m_uTextStyle |= DT_END_ELLIPSIS; else m_uTextStyle &= ~DT_END_ELLIPSIS; + } + else if( _tcscmp(pstrName, _T("wordbreak")) == 0 ) { + if( _tcscmp(pstrValue, _T("true")) == 0 ) { + m_uTextStyle &= ~DT_SINGLELINE; + m_uTextStyle |= DT_WORDBREAK | DT_EDITCONTROL; + } + else { + m_uTextStyle &= ~DT_WORDBREAK & ~DT_EDITCONTROL; + m_uTextStyle |= DT_SINGLELINE; + } } else if( _tcscmp(pstrName, _T("font")) == 0 ) SetFont(_ttoi(pstrValue)); else if( _tcscmp(pstrName, _T("textcolor")) == 0 ) { @@ -227,48 +198,6 @@ namespace DuiLib SetTextPadding(rcTextPadding); } else if( _tcscmp(pstrName, _T("showhtml")) == 0 ) SetShowHtml(_tcscmp(pstrValue, _T("true")) == 0); - - else if( _tcscmp(pstrName, _T("enabledeffect")) == 0 ) SetEnabledEffect(_tcscmp(pstrValue, _T("true")) == 0); - //else if( _tcscmp(pstrName, _T("rhaa")) == 0 ) SetTextRenderingHintAntiAlias(_ttoi(pstrValue)); - else if( _tcscmp(pstrName, _T("transshadow")) == 0 ) SetTransShadow(_ttoi(pstrValue)); - else if( _tcscmp(pstrName, _T("transtext")) == 0 ) SetTransText(_ttoi(pstrValue)); - else if( _tcscmp(pstrName, _T("transshadow1")) == 0 ) SetTransShadow1(_ttoi(pstrValue)); - else if( _tcscmp(pstrName, _T("transtext1")) == 0 ) SetTransText1(_ttoi(pstrValue)); - else if( _tcscmp(pstrName, _T("gradientangle")) == 0 ) SetGradientAngle(_ttoi(pstrValue)); - else if( _tcscmp(pstrName, _T("enabledstroke")) == 0 ) SetEnabledStroke(_tcscmp(pstrValue, _T("true")) == 0); - else if( _tcscmp(pstrName, _T("enabledshadow")) == 0 ) SetEnabledShadow(_tcscmp(pstrValue, _T("true")) == 0); - else if( _tcscmp(pstrName, _T("transstroke")) == 0 ) SetTransStroke(_ttoi(pstrValue)); - else if( _tcscmp(pstrName, _T("gradientlength")) == 0 ) SetGradientLength(_ttoi(pstrValue)); - else if( _tcscmp(pstrName, _T("shadowoffset")) == 0 ){ - LPTSTR pstr = NULL; - int offsetx = _tcstol(pstrValue, &pstr, 10); ASSERT(pstr); - int offsety = _tcstol(pstr + 1, &pstr, 10); ASSERT(pstr); - SetShadowOffset(offsetx,offsety); - } - else if( _tcscmp(pstrName, _T("textcolor1")) == 0 ) { - if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue); - LPTSTR pstr = NULL; - DWORD clrColor = _tcstoul(pstrValue, &pstr, 16); - SetTextColor1(clrColor); - } - else if( _tcscmp(pstrName, _T("textshadowcolora")) == 0 ) { - if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue); - LPTSTR pstr = NULL; - DWORD clrColor = _tcstoul(pstrValue, &pstr, 16); - SetTextShadowColorA(clrColor); - } - else if( _tcscmp(pstrName, _T("textshadowcolorb")) == 0 ) { - if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue); - LPTSTR pstr = NULL; - DWORD clrColor = _tcstoul(pstrValue, &pstr, 16); - SetTextShadowColorB(clrColor); - } - else if( _tcscmp(pstrName, _T("strokecolor")) == 0 ) { - if( *pstrValue == _T('#')) pstrValue = ::CharNext(pstrValue); - LPTSTR pstr = NULL; - DWORD clrColor = _tcstoul(pstrValue, &pstr, 16); - SetStrokeColor(clrColor); - } else if( _tcscmp(pstrName, _T("autocalcwidth")) == 0 ) { SetAutoCalcWidth(_tcscmp(pstrValue, _T("true")) == 0); } @@ -286,102 +215,24 @@ namespace DuiLib rc.top += m_rcTextPadding.top; rc.bottom -= m_rcTextPadding.bottom; - if(!GetEnabledEffect()) - { - if( m_sText.IsEmpty() ) return; - int nLinks = 0; - if( IsEnabled() ) { - if( m_bShowHtml ) - CRenderEngine::DrawHtmlText(hDC, m_pManager, rc, m_sText, m_dwTextColor, \ - NULL, NULL, nLinks, DT_SINGLELINE | m_uTextStyle); - else - CRenderEngine::DrawText(hDC, m_pManager, rc, m_sText, m_dwTextColor, \ - m_iFont, DT_SINGLELINE | m_uTextStyle); - } - else { - if( m_bShowHtml ) - CRenderEngine::DrawHtmlText(hDC, m_pManager, rc, m_sText, m_dwDisabledTextColor, \ - NULL, NULL, nLinks, DT_SINGLELINE | m_uTextStyle); - else - CRenderEngine::DrawText(hDC, m_pManager, rc, m_sText, m_dwDisabledTextColor, \ - m_iFont, DT_SINGLELINE | m_uTextStyle); - } + if( m_sText.IsEmpty() ) return; + int nLinks = 0; + if( IsEnabled() ) { + if( m_bShowHtml ) + CRenderEngine::DrawHtmlText(hDC, m_pManager, rc, m_sText, m_dwTextColor, \ + NULL, NULL, nLinks, DT_SINGLELINE | m_uTextStyle); + else + CRenderEngine::DrawText(hDC, m_pManager, rc, m_sText, m_dwTextColor, \ + m_iFont, m_uTextStyle); } - else - { - //ʹGDI+ʹЧ - ASSERT(FALSE); + else { + if( m_bShowHtml ) + CRenderEngine::DrawHtmlText(hDC, m_pManager, rc, m_sText, m_dwDisabledTextColor, \ + NULL, NULL, nLinks, DT_SINGLELINE | m_uTextStyle); + else + CRenderEngine::DrawText(hDC, m_pManager, rc, m_sText, m_dwDisabledTextColor, \ + m_iFont, m_uTextStyle); } - // else - // { - // Font nFont(hDC,m_pManager->GetFont(GetFont())); - // - // Graphics nGraphics(hDC); - // nGraphics.SetTextRenderingHint(m_TextRenderingHintAntiAlias); - // - // StringFormat format; - // format.SetAlignment((StringAlignment)m_hAlign); - // format.SetLineAlignment((StringAlignment)m_vAlign); - // - // RectF nRc((float)rc.left,(float)rc.top,(float)rc.right-rc.left,(float)rc.bottom-rc.top); - // RectF nShadowRc = nRc; - // nShadowRc.X += m_ShadowOffset.X; - // nShadowRc.Y += m_ShadowOffset.Y; - // - // int nGradientLength = GetGradientLength(); - // - // if(nGradientLength == 0) - // nGradientLength = (rc.bottom-rc.top); - // - // LinearGradientBrush nLineGrBrushA(Point(GetGradientAngle(), 0),Point(0,nGradientLength),_MakeRGB(GetTransShadow(),GetTextShadowColorA()),_MakeRGB(GetTransShadow1(),GetTextShadowColorB() == -1?GetTextShadowColorA():GetTextShadowColorB())); - // LinearGradientBrush nLineGrBrushB(Point(GetGradientAngle(), 0),Point(0,nGradientLength),_MakeRGB(GetTransText(),GetTextColor()),_MakeRGB(GetTransText1(),GetTextColor1() == -1?GetTextColor():GetTextColor1())); - // - // if(GetEnabledStroke() && GetStrokeColor() > 0) - // { - // LinearGradientBrush nLineGrBrushStroke(Point(GetGradientAngle(),0),Point(0,rc.bottom-rc.top+2),_MakeRGB(GetTransStroke(),GetStrokeColor()),_MakeRGB(GetTransStroke(),GetStrokeColor())); - // - //#ifdef _UNICODE - // nRc.Offset(-1,0); - // nGraphics.DrawString(m_TextValue,m_TextValue.GetLength(),&nFont,nRc,&format,&nLineGrBrushStroke); - // nRc.Offset(2,0); - // nGraphics.DrawString(m_TextValue,m_TextValue.GetLength(),&nFont,nRc,&format,&nLineGrBrushStroke); - // nRc.Offset(-1,-1); - // nGraphics.DrawString(m_TextValue,m_TextValue.GetLength(),&nFont,nRc,&format,&nLineGrBrushStroke); - // nRc.Offset(0,2); - // nGraphics.DrawString(m_TextValue,m_TextValue.GetLength(),&nFont,nRc,&format,&nLineGrBrushStroke); - // nRc.Offset(0,-1); - //#else - // USES_CONVERSION; - // wstring mTextValue = A2W(m_TextValue.GetData()); - // - // nRc.Offset(-1,0); - // nGraphics.DrawString(mTextValue.c_str(),mTextValue.length(),&nFont,nRc,&format,&nLineGrBrushStroke); - // nRc.Offset(2,0); - // nGraphics.DrawString(mTextValue.c_str(),mTextValue.length(),&nFont,nRc,&format,&nLineGrBrushStroke); - // nRc.Offset(-1,-1); - // nGraphics.DrawString(mTextValue.c_str(),mTextValue.length(),&nFont,nRc,&format,&nLineGrBrushStroke); - // nRc.Offset(0,2); - // nGraphics.DrawString(mTextValue.c_str(),mTextValue.length(),&nFont,nRc,&format,&nLineGrBrushStroke); - // nRc.Offset(0,-1); - //#endif - // - // } - //#ifdef _UNICODE - // if(GetEnabledShadow() && (GetTextShadowColorA() > 0 || GetTextShadowColorB() > 0)) - // nGraphics.DrawString(m_TextValue,m_TextValue.GetLength(),&nFont,nShadowRc,&format,&nLineGrBrushA); - // - // nGraphics.DrawString(m_TextValue,m_TextValue.GetLength(),&nFont,nRc,&format,&nLineGrBrushB); - //#else - // USES_CONVERSION; - // wstring mTextValue = A2W(m_TextValue.GetData()); - // - // if(GetEnabledShadow() && (GetTextShadowColorA() > 0 || GetTextShadowColorB() > 0)) - // nGraphics.DrawString(mTextValue.c_str(),mTextValue.length(),&nFont,nShadowRc,&format,&nLineGrBrushA); - // - // nGraphics.DrawString(mTextValue.c_str(),mTextValue.length(),&nFont,nRc,&format,&nLineGrBrushB); - //#endif - // - // } } bool CLabelUI::GetAutoCalcWidth() const @@ -394,197 +245,10 @@ namespace DuiLib m_bAutoCalcWidth = bAutoCalcWidth; } - void CLabelUI::SetTransShadow( int _TransShadow ) - { - m_TransShadow = _TransShadow; - } - - int CLabelUI::GetTransShadow() - { - return m_TransShadow; - } - - //void CLabelUI::SetTextRenderingHintAntiAlias( int _TextRenderingHintAntiAlias ) - //{ - // if(_TextRenderingHintAntiAlias < 0 || _TextRenderingHintAntiAlias > 5) - // _TextRenderingHintAntiAlias = 0; - // m_TextRenderingHintAntiAlias = (TextRenderingHint)_TextRenderingHintAntiAlias; - //} - - //int CLabelUI::GetTextRenderingHintAntiAlias() - //{ - // return m_TextRenderingHintAntiAlias; - //} - - void CLabelUI::SetShadowOffset( int _offset,int _angle ) - { - if(_angle > 180 || _angle < -180) - return; - - RECT rc = m_rcItem; - - if(_angle >= 0 && _angle <= 180) - rc.top -= _offset; - else if(_angle > -180 && _angle < 0) - rc.top += _offset; - - if(_angle > -90 && _angle <= 90) - rc.left -= _offset; - else if( _angle > 90 || _angle < -90) - rc.left += _offset; - - //m_ShadowOffset.X = (float)rc.top; - //m_ShadowOffset.Y = (float)rc.left; - } - - //RectF CLabelUI::GetShadowOffset() - //{ - // return m_ShadowOffset; - //} - void CLabelUI::SetText( LPCTSTR pstrText ) { - if(!GetEnabledEffect()) + if(!m_bAutoCalcWidth) return CControlUI::SetText(pstrText); - - m_TextValue = pstrText; - } - - CDuiString CLabelUI::GetText() const - { - if(!m_EnableEffect) - return CControlUI::GetText(); - return m_TextValue; - } - - void CLabelUI::SetEnabledEffect( bool _EnabledEffect ) - { - m_EnableEffect = _EnabledEffect; - } - - bool CLabelUI::GetEnabledEffect() - { - return m_EnableEffect; - } - - void CLabelUI::SetTextColor1( DWORD _TextColor1 ) - { - m_dwTextColor1 = _TextColor1; - } - - DWORD CLabelUI::GetTextColor1() - { - return m_dwTextColor1; + else this->NeedParentUpdate(); } - - void CLabelUI::SetTextShadowColorA( DWORD _TextShadowColorA ) - { - m_dwTextShadowColorA = _TextShadowColorA; - } - - DWORD CLabelUI::GetTextShadowColorA() - { - return m_dwTextShadowColorA; - } - - void CLabelUI::SetTextShadowColorB( DWORD _TextShadowColorB ) - { - m_dwTextShadowColorB = _TextShadowColorB; - } - - DWORD CLabelUI::GetTextShadowColorB() - { - return m_dwTextShadowColorB; - } - - void CLabelUI::SetTransText( int _TransText ) - { - m_TransText = _TransText; - } - - int CLabelUI::GetTransText() - { - return m_TransText; - } - - void CLabelUI::SetTransShadow1( int _TransShadow ) - { - m_TransShadow1 = _TransShadow; - } - - int CLabelUI::GetTransShadow1() - { - return m_TransShadow1; - } - - void CLabelUI::SetTransText1( int _TransText ) - { - m_TransText1 = _TransText; - } - - int CLabelUI::GetTransText1() - { - return m_TransText1; - } - - void CLabelUI::SetGradientAngle( int _SetGradientAngle ) - { - m_GradientAngle = _SetGradientAngle; - } - - int CLabelUI::GetGradientAngle() - { - return m_GradientAngle; - } - - void CLabelUI::SetEnabledStroke( bool _EnabledStroke ) - { - m_EnabledStroke = _EnabledStroke; - } - - bool CLabelUI::GetEnabledStroke() - { - return m_EnabledStroke; - } - - void CLabelUI::SetTransStroke( int _TransStroke ) - { - m_TransStroke = _TransStroke; - } - - int CLabelUI::GetTransStroke() - { - return m_TransStroke; - } - - void CLabelUI::SetStrokeColor( DWORD _StrokeColor ) - { - m_dwStrokeColor = _StrokeColor; - } - - DWORD CLabelUI::GetStrokeColor() - { - return m_dwStrokeColor; - } - - void CLabelUI::SetEnabledShadow( bool _EnabledShadowe ) - { - m_EnabledShadow = _EnabledShadowe; - } - - bool CLabelUI::GetEnabledShadow() - { - return m_EnabledShadow; - } - - void CLabelUI::SetGradientLength( int _GradientLength ) - { - m_GradientLength = _GradientLength; - } - - int CLabelUI::GetGradientLength() - { - return m_GradientLength; - } - } \ No newline at end of file diff --git a/DuiLib/Control/UILabel.h b/DuiLib/Control/UILabel.h index d1548f1e..ace359fd 100644 --- a/DuiLib/Control/UILabel.h +++ b/DuiLib/Control/UILabel.h @@ -35,38 +35,7 @@ namespace DuiLib virtual bool GetAutoCalcWidth() const; virtual void SetAutoCalcWidth(bool bAutoCalcWidth); - - void SetEnabledEffect(bool _EnabledEffect); - bool GetEnabledEffect(); - void SetText(LPCTSTR pstrText); - CDuiString GetText() const; - void SetTransShadow(int _TransShadow); - int GetTransShadow(); - void SetTransShadow1(int _TransShadow); - int GetTransShadow1(); - void SetTransText(int _TransText); - int GetTransText(); - void SetTransText1(int _TransText); - int GetTransText1(); - void SetTransStroke(int _TransStroke); - int GetTransStroke(); - void SetGradientLength(int _GradientLength); - int GetGradientLength(); - void SetShadowOffset(int _offset,int _angle); - void SetTextColor1(DWORD _TextColor1); - DWORD GetTextColor1(); - void SetTextShadowColorA(DWORD _TextShadowColorA); - DWORD GetTextShadowColorA(); - void SetTextShadowColorB(DWORD _TextShadowColorB); - DWORD GetTextShadowColorB(); - void SetStrokeColor(DWORD _StrokeColor); - DWORD GetStrokeColor(); - void SetGradientAngle(int _SetGradientAngle); - int GetGradientAngle(); - void SetEnabledStroke(bool _EnabledStroke); - bool GetEnabledStroke(); - void SetEnabledShadow(bool _EnabledShadowe); - bool GetEnabledShadow(); + void SetText(LPCTSTR pstrText); protected: DWORD m_dwTextColor; @@ -76,27 +45,6 @@ namespace DuiLib RECT m_rcTextPadding; bool m_bShowHtml; bool m_bAutoCalcWidth; - - int m_hAlign; - int m_vAlign; - int m_TransShadow; - int m_TransShadow1; - int m_TransText; - int m_TransText1; - int m_TransStroke; - int m_GradientLength; - int m_GradientAngle; - bool m_EnableEffect; - bool m_EnabledStroke; - bool m_EnabledShadow; - DWORD m_dwTextColor1; - DWORD m_dwTextShadowColorA; - DWORD m_dwTextShadowColorB; - DWORD m_dwStrokeColor; - - CDuiString m_TextValue; - ULONG_PTR m_gdiplusToken; - }; } diff --git a/DuiLib/Control/UIList.cpp b/DuiLib/Control/UIList.cpp index ba400f8d..c7327318 100644 --- a/DuiLib/Control/UIList.cpp +++ b/DuiLib/Control/UIList.cpp @@ -796,9 +796,9 @@ SIZE CListUI::GetScrollRange() const return m_pList->GetScrollRange(); } -void CListUI::SetScrollPos(SIZE szPos) +void CListUI::SetScrollPos(SIZE szPos, bool bMsg) { - m_pList->SetScrollPos(szPos); + m_pList->SetScrollPos(szPos, bMsg); } void CListUI::LineUp() @@ -934,7 +934,7 @@ int __cdecl CListBodyUI::ItemComareFunc(const void *item1, const void *item2) return m_pCompareFunc((UINT_PTR)pControl1, (UINT_PTR)pControl2, m_compareData); } -void CListBodyUI::SetScrollPos(SIZE szPos) +void CListBodyUI::SetScrollPos(SIZE szPos, bool bMsg) { int cx = 0; int cy = 0; @@ -951,6 +951,22 @@ void CListBodyUI::SetScrollPos(SIZE szPos) } if( cx == 0 && cy == 0 ) return; + + RECT rcPos; + for( int it2 = 0; it2 < m_items.GetSize(); it2++ ) { + CControlUI* pControl = static_cast(m_items[it2]); + if( !pControl->IsVisible() ) continue; + if( pControl->IsFloat() ) continue; + + rcPos = pControl->GetPos(); + rcPos.left -= cx; + rcPos.right -= cx; + rcPos.top -= cy; + rcPos.bottom -= cy; + pControl->SetPos(rcPos); + } + + Invalidate(); if( cx != 0 && m_pOwner ) { CListHeaderUI* pHeader = m_pOwner->GetHeader(); @@ -981,23 +997,6 @@ void CListBodyUI::SetScrollPos(SIZE szPos) } } - RECT rcPos; - for( int it2 = 0; it2 < m_items.GetSize(); it2++ ) { - CControlUI* pControl = static_cast(m_items[it2]); - if( !pControl->IsVisible() ) continue; - if( pControl->IsFloat() ) continue; - - rcPos = pControl->GetPos(); - rcPos.left -= cx; - rcPos.right -= cx; - rcPos.top -= cy; - rcPos.bottom -= cy; - pControl->SetPos(rcPos); - } - - Invalidate(); - - } void CListBodyUI::SetPos(RECT rc, bool bNeedInvalidate) @@ -1144,11 +1143,11 @@ void CListBodyUI::DoEvent(TEventUI& event) { if( !IsMouseEnabled() && event.Type > UIEVENT__MOUSEBEGIN && event.Type < UIEVENT__MOUSEEND ) { if( m_pOwner != NULL ) m_pOwner->DoEvent(event); - else CControlUI::DoEvent(event); + else CVerticalLayoutUI::DoEvent(event); return; } - if( m_pOwner != NULL ) m_pOwner->DoEvent(event); else CControlUI::DoEvent(event); + CVerticalLayoutUI::DoEvent(event); } ///////////////////////////////////////////////////////////////////////////////////// diff --git a/DuiLib/Control/UIList.h b/DuiLib/Control/UIList.h index 517dd4b4..3ff1389a 100644 --- a/DuiLib/Control/UIList.h +++ b/DuiLib/Control/UIList.h @@ -177,7 +177,7 @@ class UILIB_API CListUI : public CVerticalLayoutUI, public IListUI SIZE GetScrollPos() const; SIZE GetScrollRange() const; - void SetScrollPos(SIZE szPos); + void SetScrollPos(SIZE szPos, bool bMsg = true); void LineUp(); void LineDown(); void PageUp(); @@ -215,7 +215,7 @@ class UILIB_API CListBodyUI : public CVerticalLayoutUI public: CListBodyUI(CListUI* pOwner); - void SetScrollPos(SIZE szPos); + void SetScrollPos(SIZE szPos, bool bMsg = true); void SetPos(RECT rc, bool bNeedInvalidate = true); void DoEvent(TEventUI& event); BOOL SortItems(PULVCompareFunc pfnCompare, UINT_PTR dwData); diff --git a/DuiLib/Core/UIContainer.cpp b/DuiLib/Core/UIContainer.cpp index 2dc5a05b..56529449 100644 --- a/DuiLib/Core/UIContainer.cpp +++ b/DuiLib/Core/UIContainer.cpp @@ -14,8 +14,6 @@ namespace DuiLib m_bMouseChildEnabled(true), m_pVerticalScrollBar(NULL), m_pHorizontalScrollBar(NULL), - m_bHScrollProcess(false), - m_bVScrollProcess(false), m_nScrollStepSize(0) { ::ZeroMemory(&m_rcInset, sizeof(m_rcInset)); @@ -785,61 +783,16 @@ namespace DuiLib void CContainerUI::ProcessScrollBar(RECT rc, int cxRequired, int cyRequired) { - /*if( m_pHorizontalScrollBar != NULL && m_pHorizontalScrollBar->IsVisible() ) { - RECT rcScrollBarPos = { rc.left, rc.bottom, rc.right, rc.bottom + m_pHorizontalScrollBar->GetFixedHeight()}; - m_pHorizontalScrollBar->SetPos(rcScrollBarPos); - } - - if( m_pVerticalScrollBar == NULL ) return; - - if( cyRequired > rc.bottom - rc.top && !m_pVerticalScrollBar->IsVisible() ) { - m_pVerticalScrollBar->SetVisible(true); - m_pVerticalScrollBar->SetScrollRange(cyRequired - (rc.bottom - rc.top)); - m_pVerticalScrollBar->SetScrollPos(0); - m_bScrollProcess = true; - SetPos(m_rcItem); - m_bScrollProcess = false; - return; - } - // No scrollbar required - if( !m_pVerticalScrollBar->IsVisible() ) return; - - // Scroll not needed anymore? - int cyScroll = cyRequired - (rc.bottom - rc.top); - if( cyScroll <= 0 && !m_bScrollProcess) { - m_pVerticalScrollBar->SetVisible(false); - m_pVerticalScrollBar->SetScrollPos(0); - m_pVerticalScrollBar->SetScrollRange(0); - SetPos(m_rcItem); - } - else - { - RECT rcScrollBarPos = { rc.right, rc.top, rc.right + m_pVerticalScrollBar->GetFixedWidth(), rc.bottom }; - m_pVerticalScrollBar->SetPos(rcScrollBarPos); - - if( m_pVerticalScrollBar->GetScrollRange() != cyScroll ) { - int iScrollPos = m_pVerticalScrollBar->GetScrollPos(); - m_pVerticalScrollBar->SetScrollRange(::abs(cyScroll)); - if( m_pVerticalScrollBar->GetScrollRange() == 0 ) { - m_pVerticalScrollBar->SetVisible(false); - m_pVerticalScrollBar->SetScrollPos(0); - } - if( iScrollPos > m_pVerticalScrollBar->GetScrollPos() ) { - SetPos(m_rcItem); - } - } - }*/ - // heliangbao + // by º 2015/08/16 while (m_pHorizontalScrollBar) { + // Scroll needed if (cxRequired > rc.right - rc.left && !m_pHorizontalScrollBar->IsVisible()) { m_pHorizontalScrollBar->SetVisible(true); m_pHorizontalScrollBar->SetScrollRange(cxRequired - (rc.right - rc.left)); m_pHorizontalScrollBar->SetScrollPos(0); - m_bHScrollProcess = true; SetPos(m_rcItem); - m_bHScrollProcess = false; break; } @@ -848,7 +801,7 @@ namespace DuiLib // Scroll not needed anymore? int cxScroll = cxRequired - (rc.right - rc.left); - if (cxScroll <= 0 && !m_bHScrollProcess) + if (cxScroll <= 0) { m_pHorizontalScrollBar->SetVisible(false); m_pHorizontalScrollBar->SetScrollPos(0); @@ -860,14 +813,12 @@ namespace DuiLib RECT rcScrollBarPos = { rc.left, rc.bottom, rc.right, rc.bottom + m_pHorizontalScrollBar->GetFixedHeight() }; m_pHorizontalScrollBar->SetPos(rcScrollBarPos); - if (m_pHorizontalScrollBar->GetScrollRange() != cxScroll) { + if (m_pHorizontalScrollBar->GetScrollRange() != cxScroll) + { int iScrollPos = m_pHorizontalScrollBar->GetScrollPos(); - m_pHorizontalScrollBar->SetScrollRange(::abs(cxScroll)); - if (m_pHorizontalScrollBar->GetScrollRange() == 0) { - m_pHorizontalScrollBar->SetVisible(false); - m_pHorizontalScrollBar->SetScrollPos(0); - } - if (iScrollPos > m_pHorizontalScrollBar->GetScrollPos()) { + m_pHorizontalScrollBar->SetScrollRange(::abs(cxScroll)); // if scrollpos>range then scrollpos=range + if(iScrollPos > m_pHorizontalScrollBar->GetScrollPos()) + { SetPos(m_rcItem); } } @@ -875,15 +826,15 @@ namespace DuiLib break; } - while (m_pVerticalScrollBar && !m_bHScrollProcess) + while (m_pVerticalScrollBar) { - if (cyRequired > rc.bottom - rc.top && !m_pVerticalScrollBar->IsVisible()) { + // Scroll needed + if (cyRequired > rc.bottom - rc.top && !m_pVerticalScrollBar->IsVisible()) + { m_pVerticalScrollBar->SetVisible(true); m_pVerticalScrollBar->SetScrollRange(cyRequired - (rc.bottom - rc.top)); m_pVerticalScrollBar->SetScrollPos(0); - m_bVScrollProcess = true; SetPos(m_rcItem); - m_bVScrollProcess = false; break; } @@ -892,27 +843,25 @@ namespace DuiLib // Scroll not needed anymore? int cyScroll = cyRequired - (rc.bottom - rc.top); - if (cyScroll <= 0 && !m_bVScrollProcess) { + if (cyScroll <= 0) + { m_pVerticalScrollBar->SetVisible(false); m_pVerticalScrollBar->SetScrollPos(0); m_pVerticalScrollBar->SetScrollRange(0); SetPos(m_rcItem); + break; } - else + + RECT rcScrollBarPos = { rc.right, rc.top, rc.right + m_pVerticalScrollBar->GetFixedWidth(), rc.bottom }; + m_pVerticalScrollBar->SetPos(rcScrollBarPos); + + if (m_pVerticalScrollBar->GetScrollRange() != cyScroll) { - RECT rcScrollBarPos = { rc.right, rc.top, rc.right + m_pVerticalScrollBar->GetFixedWidth(), rc.bottom }; - m_pVerticalScrollBar->SetPos(rcScrollBarPos); - - if (m_pVerticalScrollBar->GetScrollRange() != cyScroll) { - int iScrollPos = m_pVerticalScrollBar->GetScrollPos(); - m_pVerticalScrollBar->SetScrollRange(::abs(cyScroll)); - if (m_pVerticalScrollBar->GetScrollRange() == 0) { - m_pVerticalScrollBar->SetVisible(false); - m_pVerticalScrollBar->SetScrollPos(0); - } - if (iScrollPos > m_pVerticalScrollBar->GetScrollPos()) { - SetPos(m_rcItem); - } + int iScrollPos = m_pVerticalScrollBar->GetScrollPos(); + m_pVerticalScrollBar->SetScrollRange(::abs(cyScroll)); // if scrollpos>range then scrollpos=range + if(iScrollPos > m_pVerticalScrollBar->GetScrollPos()) + { + SetPos(m_rcItem); } } break; diff --git a/DuiLib/Core/UIContainer.h b/DuiLib/Core/UIContainer.h index ed02eee0..ea00a82d 100644 --- a/DuiLib/Core/UIContainer.h +++ b/DuiLib/Core/UIContainer.h @@ -116,8 +116,6 @@ class UILIB_API CContainerUI : public CControlUI, public IContainerUI bool m_bAutoDestroy; bool m_bDelayedDestroy; bool m_bMouseChildEnabled; - bool m_bHScrollProcess; // ֹSetPosѭ - bool m_bVScrollProcess; // ֹSetPosѭ int m_nScrollStepSize; CScrollBarUI* m_pVerticalScrollBar; diff --git a/DuiLib/Core/UIControl.cpp b/DuiLib/Core/UIControl.cpp index ca8ab8a8..ae4581c1 100644 --- a/DuiLib/Core/UIControl.cpp +++ b/DuiLib/Core/UIControl.cpp @@ -740,6 +740,7 @@ void CControlUI::SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue) } else if( _tcscmp(pstrName, _T("float")) == 0 ) { CDuiString nValue = pstrValue; + // ̬Ա if(nValue.Find(',') < 0) { SetFloat(_tcscmp(pstrValue, _T("true")) == 0); } diff --git a/bin/skin/duidemo/gifani.gif b/bin/skin/duidemo/gifani.gif new file mode 100644 index 0000000000000000000000000000000000000000..d6bfc614afa32788086832b0c5db8874b82ddd94 GIT binary patch literal 52565 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%0AOC}zG0^ox0rZ4Nyu=OXc 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 - + - + - +