diff --git a/bin/resources/themes/default/controls/controls.xml b/bin/resources/themes/default/controls/controls.xml
index 2c18df9e..4e718209 100644
--- a/bin/resources/themes/default/controls/controls.xml
+++ b/bin/resources/themes/default/controls/controls.xml
@@ -57,7 +57,13 @@
+
+
+
+
(FindControl(L"progress"));
progress->SetValue(value);
+ auto circleprogress = dynamic_cast(FindControl(L"circleprogress"));
+ circleprogress->SetValue(value);
+ TCHAR szBuffer[32] = {0};
+ swprintf_s(szBuffer, _T("%.0f%%"), value);
+ circleprogress->SetText(szBuffer);
}
diff --git a/tool_kits/duilib/Control/CircleProgress.cpp b/tool_kits/duilib/Control/CircleProgress.cpp
new file mode 100644
index 00000000..b1698ff5
--- /dev/null
+++ b/tool_kits/duilib/Control/CircleProgress.cpp
@@ -0,0 +1,206 @@
+#include "stdafx.h"
+#include "CircleProgress.h"
+#include "shlwapi.h"
+
+namespace ui
+{
+ CircleProgress::CircleProgress() :
+ m_bCircular(true),
+ m_bClockwise(true),
+ m_nCircleWidth(1),
+ m_dwBackgroundColor(0),
+ m_dwForegroundColor(0),
+ m_dwGradientColor(0),
+ m_pIndicator(nullptr)
+ {
+
+ }
+
+ void CircleProgress::SetAttribute(const std::wstring& srName, const std::wstring& strValue)
+ {
+ if (srName == _T("circular")) SetCircular(strValue == _T("true"));
+ else if (srName == _T("circlewidth")) SetCircleWidth(_ttoi(strValue.c_str()));
+ else if (srName == _T("indicator")) SetIndicator(strValue);
+ else if (srName == _T("clockwise")) SetClockwiseRotation(strValue == _T("true"));
+ else if (srName == _T("bgcolor")) {
+ LPCTSTR pValue = strValue.c_str();
+ while (*pValue > _T('\0') && *pValue <= _T(' ')) pValue = ::CharNext(pValue);
+ SetBackgroudColor(pValue);
+ }
+ else if (srName == _T("fgcolor")) {
+ LPCTSTR pValue = strValue.c_str();
+ while (*pValue > _T('\0') && *pValue <= _T(' ')) pValue = ::CharNext(pValue);
+ SetForegroudColor(pValue);
+ }
+ else if (srName == _T("gradientcolor")) {
+ LPCTSTR pValue = strValue.c_str();
+ while (*pValue > _T('\0') && *pValue <= _T(' ')) pValue = ::CharNext(pValue);
+ SetCircleGradientColor(pValue);
+ }
+ else Progress::SetAttribute(srName, strValue);
+ }
+
+ void CircleProgress::PaintStatusImage(IRenderContext* pRender)
+ {
+ Progress::PaintStatusImage(pRender);
+ if (m_bCircular)
+ {
+ //Ä¿Ç°IRenderContext»¹ÓкܶàGDI+½Ó¿ÚδʵÏÖ£¬ÔÝʱֱ½ÓÓÃgdi+»Í¼ÁË
+ //ÒÔºó¿ÉÄÜ»áµ÷Õû£ºÐèʵÏÖ1¡¢DrawArc 2¡¢PenÔö¼Óbrush(½¥±ä)Èë²Î 3¡¢¿ÉÒÔ×ÔÓÉÉèÖÃGraphicsÊôÐÔ
+ int direction = m_bClockwise ? 1 : -1; //Ðýת·½Ïò
+ int bordersize = 1; //»¡¶È¿í¶ÈĿǰʹÓÃ1ÏñËØ
+
+ Gdiplus::Graphics graphics(pRender->GetDC());
+ graphics.SetSmoothingMode(Gdiplus::SmoothingModeAntiAlias);
+ Gdiplus::Pen bgPen(m_dwBackgroundColor, m_nCircleWidth);
+ // Ô²ÐÎÖÐÐÄ
+ CPoint center;
+ center.x = m_rcItem.left + (m_rcItem.right - m_rcItem.left) / 2;
+ center.y = m_rcItem.top + (m_rcItem.bottom - m_rcItem.top) / 2;
+
+ // ¿Ø¼þ¾ØÐÎÄÚµÄ×î´óÕý·½Ðεı߽ç
+ int side = min(m_rcItem.right - m_rcItem.left, m_rcItem.bottom - m_rcItem.top);
+ //UiRect rcBorder; ÈÔÈ»´æÔÚUiRect µ½ RectFµÄת»»£¬ËùÒÔÖ±½ÓÓÃgdiµÄRectFÁË
+ Gdiplus::RectF rcBorder;
+ rcBorder.X = center.x - side / 2;
+ rcBorder.Y = center.y - side / 2;
+ rcBorder.Width = rcBorder.Height = side;
+
+ Gdiplus::RectF outer = rcBorder;
+ if (m_pIndicator) {
+ outer.Inflate(-1.0F *m_pIndicator->GetWidth() / 2, -1.0F * m_pIndicator->GetWidth() / 2);
+ }
+ else
+ {
+ outer.Inflate(-0.5 * m_nCircleWidth, -0.5 * m_nCircleWidth);
+ }
+ outer.Inflate(-1, -1);
+
+
+ if (m_dwGradientColor == 0)
+ {
+ //²»Ê¹Óý¥±äÉ«£¬Ö±½ÓÓÃÇ°¾°É«ÆÌÂú
+ Gdiplus::Pen fgPen(m_dwForegroundColor, m_nCircleWidth);
+ graphics.DrawArc(&bgPen, outer, 270, 360); //270´Ó×îÉÏÃ濪ʼµÝÔö£¬ÉèΪ0µÄ»°£¬ÊÇ×îÓұ߿ªÊ¼
+ graphics.DrawArc(&fgPen, outer, 270, direction * 360 * (m_nValue - m_nMin) / (m_nMax - m_nMin));
+ }
+ else
+ {
+ Gdiplus::REAL factors[4] = { 0.0f, 0.4f, 0.6f, 1.0f };
+ Gdiplus::REAL positions[4] = { 0.0f, 0.2f, 0.8f, 1.0f };
+
+ Gdiplus::LinearGradientBrush lgbrush(rcBorder, m_dwForegroundColor, m_dwGradientColor, Gdiplus::LinearGradientModeVertical);
+ lgbrush.SetBlend(factors, positions, 4);
+ graphics.DrawArc(&bgPen, outer, 270, 360);
+ Gdiplus::Pen fgPen(&lgbrush, m_nCircleWidth);
+ graphics.DrawArc(&fgPen, outer, 270, direction * 360 * (m_nValue - m_nMin) / (m_nMax - m_nMin));
+
+ }
+
+ //»ÐýתָʾÆ÷ͼ±ê£¬ÐèÒªÓõ½¾ØÕó
+ if (m_pIndicator)
+ {
+ Gdiplus::Matrix matrix;
+ matrix.RotateAt(direction * 360 * (m_nValue - m_nMin) / (m_nMax - m_nMin), Gdiplus::PointF(center.x, center.y), Gdiplus::MatrixOrderAppend);
+ graphics.SetTransform(&matrix);
+ Gdiplus::RectF rectf;
+ rectf.X = center.x - m_pIndicator->GetWidth() / 2;
+ rectf.Y = outer.Y + bordersize / 2 -m_pIndicator->GetHeight() / 2;
+ rectf.Width = m_pIndicator->GetWidth();
+ rectf.Height = m_pIndicator->GetHeight();
+ graphics.DrawImage(m_pIndicator, rectf);
+ }
+
+ }
+ }
+
+ void CircleProgress::ClearImageCache()
+ {
+ __super::ClearImageCache();
+ if (m_pIndicator)
+ {
+ delete m_pIndicator;
+ m_pIndicator = nullptr;
+ }
+ }
+
+
+
+ void CircleProgress::SetCircular(bool bCircular /*= true*/)
+ {
+ m_bCircular = bCircular;
+ Invalidate();
+ }
+
+
+ void CircleProgress::SetClockwiseRotation(bool bClockwise /*= true*/)
+ {
+ if (bClockwise != m_bClockwise)
+ {
+ m_bClockwise = bClockwise;
+ if (m_pIndicator)
+ {
+ //ÒѾÐýתÁËͼƬ£¬Ðýתµ½Ïà·´µÄ·½Ïò
+ m_pIndicator->RotateFlip(Gdiplus::Rotate180FlipNone);
+ }
+
+ }
+ }
+
+ void CircleProgress::SetCircleWidth(int nCircleWidth)
+ {
+ m_nCircleWidth = nCircleWidth;
+ Invalidate();
+ }
+
+
+ void CircleProgress::SetBackgroudColor(const std::wstring& strColor)
+ {
+ m_dwBackgroundColor = GlobalManager::GetTextColor(strColor);
+ ASSERT(m_dwBackgroundColor != 0);
+ Invalidate();
+ }
+
+ void CircleProgress::SetForegroudColor(const std::wstring& strColor)
+ {
+ m_dwForegroundColor = GlobalManager::GetTextColor(strColor);
+ ASSERT(m_dwForegroundColor != 0);
+ Invalidate();
+ }
+
+ void CircleProgress::SetIndicator(const std::wstring& sIndicatorImage)
+ {
+ if (m_sIndicatorImage != sIndicatorImage)
+ {
+ m_sIndicatorImage = sIndicatorImage;
+ if (m_pIndicator)
+ {
+ delete m_pIndicator;
+ m_pIndicator = nullptr;
+ }
+ std::wstring imagepath = m_sIndicatorImage;
+ if (!::PathFileExistsW(imagepath.c_str())) {
+ imagepath = GlobalManager::GetResourcePath() + m_pWindow->GetWindowResourcePath() + imagepath;
+ }
+ if (!::PathFileExistsW(imagepath.c_str())) {
+ return;
+ }
+ m_pIndicator = new Gdiplus::Image(imagepath.c_str());
+
+ Gdiplus::Status state = m_pIndicator->GetLastStatus();
+ if (Gdiplus::Ok == state)
+ {
+ // ¼Ù¶¨Í¼Æ¬Ö¸ÏòÉÏ
+ m_pIndicator->RotateFlip(m_bClockwise ? Gdiplus::Rotate90FlipNone : Gdiplus::Rotate270FlipNone);
+ Invalidate();
+ }
+ }
+ }
+
+ void CircleProgress::SetCircleGradientColor(const std::wstring& strColor)
+ {
+ m_dwGradientColor = GlobalManager::GetTextColor(strColor);
+ ASSERT(m_dwGradientColor != 0);
+ Invalidate();
+ }
+}
diff --git a/tool_kits/duilib/Control/CircleProgress.h b/tool_kits/duilib/Control/CircleProgress.h
new file mode 100644
index 00000000..069dd1a2
--- /dev/null
+++ b/tool_kits/duilib/Control/CircleProgress.h
@@ -0,0 +1,84 @@
+/** @file CircleProgress.h
+* @brief Ô²»·Ð͹ö¶¯Ìõ¿Ø¼þ£¬Ô²»·Öмä¿ÉÒÔÓÐÎı¾£¨Èç85%£©
+* @copyright (c) 2019-2022, NetEase Inc. All rights reserved
+* @author Xuhuajie
+* @date 2019/8/14
+*/
+
+#ifndef UI_CONTROL_CIRCLEPROGRESS_H_
+#define UI_CONTROL_CIRCLEPROGRESS_H_
+
+#pragma once
+
+namespace ui
+{
+
+ class UILIB_API CircleProgress : public Progress
+ {
+ public:
+ CircleProgress();
+
+ /// ÖØд¸¸Àà·½·¨£¬Ìṩ¸öÐÔ»¯¹¦ÄÜ£¬Çë²Î¿¼¸¸ÀàÉùÃ÷
+ virtual void SetAttribute(const std::wstring& strName, const std::wstring& strValue) override;
+ virtual void PaintStatusImage(IRenderContext* pRender) override;
+ virtual void ClearImageCache() override;
+
+ /**
+ * @brief ÉèÖÃÔ²Ðιö¶¯Ìõ
+ * @param[in] bCircular Ϊ true ʱÉèÖÃΪԲÐιö¶¯Ìõ£¬false ʱÉèÖÃΪ¸¸¼¶¹ö¶¯Ìõ£¬Ä¬ÈÏΪ true
+ * @return ÎÞ
+ */
+ void SetCircular(bool bCircular = true);
+ /**
+ * @brief ÉèÖõÝÔö·½Ïò
+ * @param[in] bClockwise Ϊ true ʱÉèÖÃΪ˳ʱÕ룬false ʱÉèÖÃΪÄæʱÕ룬ĬÈÏΪ true
+ * @return ÎÞ
+ */
+ void SetClockwiseRotation(bool bClockwise = true);
+ /**
+ * @brief ÉèÖÃÔ²»·¿í¶È
+ * @param[in] nCircleWidth ¿í¶ÈÊýÖµ
+ * @return ÎÞ
+ */
+ void SetCircleWidth(int nCircleWidth);
+ /**
+ * @brief ÉèÖýø¶ÈÌõ±³¾°ÑÕÉ«
+ * @param[in] strColorÒªÉèÖõı³¾°ÑÕÉ«×Ö·û´®£¬¸Ã×Ö·û´®±ØÐëÔÚ global.xml ÖдæÔÚ
+ * @return ÎÞ
+ */
+ void SetBackgroudColor(const std::wstring& strColor);
+ /**
+ * @brief ÉèÖýø¶ÈÌõÇ°¾°ÑÕÉ«
+ * @param[in] strColorÒªÉèÖõÄÇ°¾°ÑÕÉ«×Ö·û´®£¬¸Ã×Ö·û´®±ØÐëÔÚ global.xml ÖдæÔÚ
+ * @return ÎÞ
+ */
+ void SetForegroudColor(const std::wstring& strColor);
+ /**
+ * @brief ÉèÖýø¶ÈÌõÇ°¾°½¥±äÑÕÉ«£¬ÓëForegroudColorͬʱʹÓ㬿ÉÒÔ²»ÉèÖÃ,ÔòÎÞ½¥±äЧ¹û
+ * @param[in] strColorÒªÉèÖõÄÇ°¾°½¥±äÑÕÉ«×Ö·û´®£¬¸Ã×Ö·û´®±ØÐëÔÚ global.xml ÖдæÔÚ
+ * @return ÎÞ
+ */
+ void SetCircleGradientColor(const std::wstring& strColor);
+ /**
+ * @brief ÉèÖýø¶ÈָʾÒƶ¯Í¼±ê
+ * @param[in] sIndicatorImageÒªÉèÖõÄͼƬ
+ * @return ÎÞ
+ */
+ void SetIndicator(const std::wstring& sIndicatorImage);
+
+ protected:
+ bool m_bCircular;
+ bool m_bClockwise;
+ int m_nCircleWidth;
+ DWORD m_dwBackgroundColor;
+ DWORD m_dwForegroundColor;
+ DWORD m_dwGradientColor;
+ //Image m_IndicatorImage; //ʹÓÃimage¶ÔÏó£¬ÎÞ·¨Âú×ãÐèÇó£¬ÐèÒªÉèÖþØÕó±ä»»
+ Gdiplus::Image* m_pIndicator; //´ËÀàĿǰά»¤×ÊÔ´¹ÜÀí
+ std::wstring m_sIndicatorImage;
+
+ };
+
+} // namespace ui
+
+#endif // UI_CONTROL_CIRCLEPROGRESS_H_
diff --git a/tool_kits/duilib/Core/Define.h b/tool_kits/duilib/Core/Define.h
index 78c43bec..f641f496 100644
--- a/tool_kits/duilib/Core/Define.h
+++ b/tool_kits/duilib/Core/Define.h
@@ -239,6 +239,7 @@ EventType StringToEnum(const std::wstring& messageType);
#define DUI_CTR_COMBO (_T("Combo"))
#define DUI_CTR_SLIDER (_T("Slider"))
#define DUI_CTR_PROGRESS (_T("Progress"))
+#define DUI_CTR_CIRCLEPROGRESS (_T("CircleProgress"))
#define DUI_CTR_SCROLLBAR (_T("ScrollBar"))
}// namespace ui
diff --git a/tool_kits/duilib/Core/WindowBuilder.cpp b/tool_kits/duilib/Core/WindowBuilder.cpp
index 71ddc362..f6636e52 100644
--- a/tool_kits/duilib/Core/WindowBuilder.cpp
+++ b/tool_kits/duilib/Core/WindowBuilder.cpp
@@ -493,6 +493,7 @@ Control* WindowBuilder::CreateControlByClass(const std::wstring& strControlClass
break;
case 14:
if (strControlClass == DUI_CTR_VIRTUALLISTBOX) pControl = new VirtualListBox;
+ else if (strControlClass == DUI_CTR_CIRCLEPROGRESS) pControl = new CircleProgress;
break;
case 15:
break;
diff --git a/tool_kits/duilib/UIlib.h b/tool_kits/duilib/UIlib.h
index 2c7e57bb..31d33738 100644
--- a/tool_kits/duilib/UIlib.h
+++ b/tool_kits/duilib/UIlib.h
@@ -127,6 +127,7 @@
#include "Control/Option.h"
#include "Control/Progress.h"
+#include "Control/CircleProgress.h"
#include "Control/Slider.h"
#include "Control/RichEdit.h"
diff --git a/tool_kits/duilib/duilib.vcxproj b/tool_kits/duilib/duilib.vcxproj
index 430848c9..6177fdf3 100644
--- a/tool_kits/duilib/duilib.vcxproj
+++ b/tool_kits/duilib/duilib.vcxproj
@@ -1,420 +1,422 @@
-
-
-
-
- Debug
- Win32
-
-
- Debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- {E106ACD7-4E53-4AEE-942B-D0DD426DB34E}
- duilib
-
-
-
- StaticLibrary
- false
- Unicode
- v120_xp
-
-
- StaticLibrary
- false
- Unicode
- v120_xp
-
-
- StaticLibrary
- false
- Unicode
- v120_xp
-
-
- StaticLibrary
- false
- Unicode
- v120_xp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <_ProjectFileVersion>10.0.40219.1
- $(ProjectDir)..\..\libs\
- $(ProjectDir)..\..\tmp\$(PlatformName)\$(ProjectName)\$(Configuration)\
- false
- false
- false
- false
- false
- false
- $(ProjectDir)..\..\libs\
- $(ProjectDir)..\..\tmp\$(PlatformName)\$(ProjectName)\$(Configuration)\
- false
- false
- false
- false
- false
- false
- AllRules.ruleset
- AllRules.ruleset
-
-
-
-
- AllRules.ruleset
- AllRules.ruleset
-
-
-
-
- $(ProjectName)_d
- $(ProjectName)_d
-
-
- $(ProjectDir)..\..\libs\x64\
- $(ProjectDir)..\..\tmp\$(PlatformName)\$(ProjectName)\$(Configuration)\
-
-
- $(ProjectDir)..\..\libs\x64\
- $(ProjectDir)..\..\tmp\$(PlatformName)\$(ProjectName)\$(Configuration)\
-
-
-
- _DEBUG;%(PreprocessorDefinitions)
- true
- true
- Win32
- .\Debug/duilib.tlb
-
-
-
-
- Disabled
- .\;..\;%(AdditionalIncludeDirectories)
- WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebug
- Use
- stdafx.h
- $(IntDir)$(TargetName).pch
- Level4
- true
- EditAndContinue
- false
- 4100;4121;4127;4244;4310;4355;4481;4505;4512;4702;%(DisableSpecificWarnings)
-
-
- _DEBUG;%(PreprocessorDefinitions)
- 0x0409
-
-
- $(ProjectDir)..\..\..\bin\$(ProjectName)_d.dll
- true
- %(AdditionalLibraryDirectories)
- %(DelayLoadDLLs)
- true
- $(ProjectDir)..\..\..\bin\$(TargetName).pdb
- 0x11000000
- $(ProjectDir)..\..\..\libs\duilib_d.lib
- MachineX86
- comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;%(AdditionalDependencies)
-
-
- true
- .\Debug/duilib.bsc
-
-
- comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;imm32.lib;shlwapi.lib
- /IGNORE:4006,4221 %(AdditionalOptions)
-
-
-
-
- _DEBUG;%(PreprocessorDefinitions)
- true
- true
- .\Debug/duilib.tlb
-
-
-
-
- Disabled
- .\;..\;%(AdditionalIncludeDirectories)
- WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
- EnableFastChecks
- MultiThreadedDebug
- Use
- stdafx.h
- $(IntDir)$(TargetName).pch
- Level4
- true
- ProgramDatabase
- false
- 4100;4121;4127;4244;4310;4355;4481;4505;4512;4702;%(DisableSpecificWarnings)
-
-
- _DEBUG;%(PreprocessorDefinitions)
- 0x0409
-
-
- $(ProjectDir)..\..\..\bin\$(ProjectName)_d.dll
- true
- %(AdditionalLibraryDirectories)
- %(DelayLoadDLLs)
- true
- $(ProjectDir)..\..\..\bin\$(TargetName).pdb
- 0x11000000
- $(ProjectDir)..\..\..\libs\duilib_d.lib
- comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;%(AdditionalDependencies)
-
-
- true
- .\Debug/duilib.bsc
-
-
- comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;imm32.lib;shlwapi.lib
- /IGNORE:4006,4221 %(AdditionalOptions)
-
-
-
-
- NDEBUG;%(PreprocessorDefinitions)
- true
- true
- Win32
- .\Release/duilib.tlb
-
-
-
-
- MaxSpeed
- Default
- .\;..\;%(AdditionalIncludeDirectories)
- WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
- true
- true
- Use
- $(IntDir)$(TargetName).pch
- Level4
- true
- true
- true
- MultiThreaded
- 4100;4121;4127;4244;4310;4355;4481;4505;4512;4702;%(DisableSpecificWarnings)
-
-
- NDEBUG;%(PreprocessorDefinitions)
- 0x0406
-
-
- $(ProjectDir)..\..\..\bin\$(ProjectName).dll
- true
- %(AdditionalLibraryDirectories)
- %(DelayLoadDLLs)
- 0x11000000
- $(ProjectDir)..\..\..\libs\duilib.lib
- MachineX86
- $(ProjectDir)..\..\..\bin\$(TargetName).pdb
- true
- comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;%(AdditionalDependencies)
-
-
- true
- .\Release/duilib.bsc
-
-
- comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;imm32.lib;shlwapi.lib
- /IGNORE:4006,4221 %(AdditionalOptions)
-
-
-
-
- NDEBUG;%(PreprocessorDefinitions)
- true
- true
- .\Release/duilib.tlb
-
-
-
-
- MaxSpeed
- Default
- .\;..\;%(AdditionalIncludeDirectories)
- WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
- true
- true
- Use
- $(IntDir)$(TargetName).pch
- Level4
- true
- true
- true
- MultiThreaded
- 4100;4121;4127;4244;4310;4355;4481;4505;4512;4702;%(DisableSpecificWarnings)
-
-
- NDEBUG;%(PreprocessorDefinitions)
- 0x0406
-
-
- $(ProjectDir)..\..\..\bin\$(ProjectName).dll
- true
- %(AdditionalLibraryDirectories)
- %(DelayLoadDLLs)
- 0x11000000
- $(ProjectDir)..\..\..\libs\duilib.lib
- $(ProjectDir)..\..\..\bin\$(TargetName).pdb
- true
- comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;%(AdditionalDependencies)
-
-
- true
- .\Release/duilib.bsc
-
-
- comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;imm32.lib;shlwapi.lib
- /IGNORE:4006,4221 %(AdditionalOptions)
-
-
-
-
-
-
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Create
- Create
- Create
- Create
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {E106ACD7-4E53-4AEE-942B-D0DD426DB34E}
+ duilib
+
+
+
+ StaticLibrary
+ false
+ Unicode
+ v120_xp
+
+
+ StaticLibrary
+ false
+ Unicode
+ v120_xp
+
+
+ StaticLibrary
+ false
+ Unicode
+ v120_xp
+
+
+ StaticLibrary
+ false
+ Unicode
+ v120_xp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.40219.1
+ $(ProjectDir)..\..\libs\
+ $(ProjectDir)..\..\tmp\$(PlatformName)\$(ProjectName)\$(Configuration)\
+ false
+ false
+ false
+ false
+ false
+ false
+ $(ProjectDir)..\..\libs\
+ $(ProjectDir)..\..\tmp\$(PlatformName)\$(ProjectName)\$(Configuration)\
+ false
+ false
+ false
+ false
+ false
+ false
+ AllRules.ruleset
+ AllRules.ruleset
+
+
+
+
+ AllRules.ruleset
+ AllRules.ruleset
+
+
+
+
+ $(ProjectName)_d
+ $(ProjectName)_d
+
+
+ $(ProjectDir)..\..\libs\x64\
+ $(ProjectDir)..\..\tmp\$(PlatformName)\$(ProjectName)\$(Configuration)\
+
+
+ $(ProjectDir)..\..\libs\x64\
+ $(ProjectDir)..\..\tmp\$(PlatformName)\$(ProjectName)\$(Configuration)\
+
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ true
+ true
+ Win32
+ .\Debug/duilib.tlb
+
+
+
+
+ Disabled
+ .\;..\;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+ Use
+ stdafx.h
+ $(IntDir)$(TargetName).pch
+ Level4
+ true
+ EditAndContinue
+ false
+ 4100;4121;4127;4244;4310;4355;4481;4505;4512;4702;%(DisableSpecificWarnings)
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ 0x0409
+
+
+ $(ProjectDir)..\..\..\bin\$(ProjectName)_d.dll
+ true
+ %(AdditionalLibraryDirectories)
+ %(DelayLoadDLLs)
+ true
+ $(ProjectDir)..\..\..\bin\$(TargetName).pdb
+ 0x11000000
+ $(ProjectDir)..\..\..\libs\duilib_d.lib
+ MachineX86
+ comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;%(AdditionalDependencies)
+
+
+ true
+ .\Debug/duilib.bsc
+
+
+ comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;imm32.lib;shlwapi.lib
+ /IGNORE:4006,4221 %(AdditionalOptions)
+
+
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ true
+ true
+ .\Debug/duilib.tlb
+
+
+
+
+ Disabled
+ .\;..\;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+ Use
+ stdafx.h
+ $(IntDir)$(TargetName).pch
+ Level4
+ true
+ ProgramDatabase
+ false
+ 4100;4121;4127;4244;4310;4355;4481;4505;4512;4702;%(DisableSpecificWarnings)
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+ 0x0409
+
+
+ $(ProjectDir)..\..\..\bin\$(ProjectName)_d.dll
+ true
+ %(AdditionalLibraryDirectories)
+ %(DelayLoadDLLs)
+ true
+ $(ProjectDir)..\..\..\bin\$(TargetName).pdb
+ 0x11000000
+ $(ProjectDir)..\..\..\libs\duilib_d.lib
+ comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;%(AdditionalDependencies)
+
+
+ true
+ .\Debug/duilib.bsc
+
+
+ comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;imm32.lib;shlwapi.lib
+ /IGNORE:4006,4221 %(AdditionalOptions)
+
+
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+ true
+ true
+ Win32
+ .\Release/duilib.tlb
+
+
+
+
+ MaxSpeed
+ Default
+ .\;..\;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ true
+ true
+ Use
+ $(IntDir)$(TargetName).pch
+ Level4
+ true
+ true
+ true
+ MultiThreaded
+ 4100;4121;4127;4244;4310;4355;4481;4505;4512;4702;%(DisableSpecificWarnings)
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+ 0x0406
+
+
+ $(ProjectDir)..\..\..\bin\$(ProjectName).dll
+ true
+ %(AdditionalLibraryDirectories)
+ %(DelayLoadDLLs)
+ 0x11000000
+ $(ProjectDir)..\..\..\libs\duilib.lib
+ MachineX86
+ $(ProjectDir)..\..\..\bin\$(TargetName).pdb
+ true
+ comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;%(AdditionalDependencies)
+
+
+ true
+ .\Release/duilib.bsc
+
+
+ comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;imm32.lib;shlwapi.lib
+ /IGNORE:4006,4221 %(AdditionalOptions)
+
+
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+ true
+ true
+ .\Release/duilib.tlb
+
+
+
+
+ MaxSpeed
+ Default
+ .\;..\;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ true
+ true
+ Use
+ $(IntDir)$(TargetName).pch
+ Level4
+ true
+ true
+ true
+ MultiThreaded
+ 4100;4121;4127;4244;4310;4355;4481;4505;4512;4702;%(DisableSpecificWarnings)
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+ 0x0406
+
+
+ $(ProjectDir)..\..\..\bin\$(ProjectName).dll
+ true
+ %(AdditionalLibraryDirectories)
+ %(DelayLoadDLLs)
+ 0x11000000
+ $(ProjectDir)..\..\..\libs\duilib.lib
+ $(ProjectDir)..\..\..\bin\$(TargetName).pdb
+ true
+ comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;%(AdditionalDependencies)
+
+
+ true
+ .\Release/duilib.bsc
+
+
+ comctl32.lib;gdiplus.lib;msimg32.lib;winmm.lib;imm32.lib;shlwapi.lib
+ /IGNORE:4006,4221 %(AdditionalOptions)
+
+
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Create
+ Create
+ Create
+ Create
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tool_kits/duilib/duilib.vcxproj.filters b/tool_kits/duilib/duilib.vcxproj.filters
index 5e5f5a8b..ab7a238e 100644
--- a/tool_kits/duilib/duilib.vcxproj.filters
+++ b/tool_kits/duilib/duilib.vcxproj.filters
@@ -1,341 +1,347 @@
-
-
-
-
- {8fc45193-00aa-405d-8445-6f6619d94834}
- cpp;c;cxx;rc;def;r;odl;idl;hpj;bat
-
-
- {b7a95a7b-1188-487e-b75b-a6e6fe6055f7}
-
-
- {ef45879d-87a5-4d7f-9a92-fdf97778b304}
-
-
- {f70f6171-d9fd-4189-b1d7-5250e2d6f0fd}
-
-
- {b7a7aeb7-2adb-4395-b80d-4922bd4efc19}
- h;hpp;hxx;hm;inl
-
-
- {3472fe0b-1976-4ada-9c67-2f07b06068d2}
-
-
- {1a8a45f1-b601-4178-b118-b282f71c4dec}
-
-
- {6eb00376-1e2b-4faf-9eaa-bdc915049307}
-
-
- {38a8cc27-53b9-4413-8919-ae7448229ad2}
-
-
- {101719c8-36d9-454c-be9a-d0f158cf21b4}
-
-
- {4f978102-2279-42b9-ab99-8a719e9fdf53}
-
-
- {2069d257-49fd-4283-9999-19e7dda732c8}
-
-
- {ab59d168-e65b-4cf4-aff6-a2a07e35d058}
-
-
- {93308611-e7ba-4331-845a-700f5b457c52}
-
-
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files\Utils
-
-
- Source Files\Control
-
-
- Source Files\Control
-
-
- Source Files\Control
-
-
- Source Files\Control
-
-
- Source Files\Control
-
-
- Source Files\Control
-
-
- Source Files\Control
-
-
- Source Files\Core
-
-
- Source Files\Core
-
-
- Source Files\Utils
-
-
- Source Files\Core
-
-
- Source Files\Core
-
-
- Source Files\Core
-
-
- Source Files\Box
-
-
- Source Files\Box
-
-
- Source Files\Box
-
-
- Source Files\Box
-
-
- Source Files\Box
-
-
- Source Files\Utils
-
-
- Source Files\Animation
-
-
- Source Files\Core
-
-
- Source Files\Utils
-
-
- Source Files\Core
-
-
- Source Files\Animation
-
-
- Source Files\Utils
-
-
- Source Files\Core
-
-
- Source Files\Utils
-
-
- Source Files\Control
-
-
- Source Files\Utils
-
-
- Source Files\Render
-
-
- Source Files\Render
-
-
- Source Files\Render
-
-
- Source Files\Render
-
-
- Source Files\Render
-
-
- Source Files\Utils
-
-
- Source Files\Render
-
-
- Source Files\Render
-
-
- Source Files\Render
-
-
- Source Files\Render
-
-
- Source Files\Render
-
-
- Source Files\Utils
-
-
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files\Utils
-
-
- Header Files\Utils
-
-
- Header Files\Utils
-
-
- Header Files\Control
-
-
- Header Files\Control
-
-
- Header Files\Control
-
-
- Header Files\Control
-
-
- Header Files\Control
-
-
- Header Files\Control
-
-
- Header Files\Control
-
-
- Header Files\Control
-
-
- Header Files\Control
-
-
- Header Files\Control
-
-
- Header Files\Control
-
-
- Header Files\Core
-
-
- Header Files\Core
-
-
- Header Files\Core
-
-
- Header Files\Utils
-
-
- Header Files\Utils
-
-
- Header Files\Core
-
-
- Header Files\Core
-
-
- Header Files\Core
-
-
- Header Files\Box
-
-
- Header Files\Box
-
-
- Header Files\Box
-
-
- Header Files\Box
-
-
- Header Files\Box
-
-
- Header Files\Animation
-
-
- Header Files\Core
-
-
- Header Files\Utils
-
-
- Header Files\Core
-
-
- Header Files\Animation
-
-
- Header Files\Utils
-
-
- Header Files\Utils
-
-
- Header Files\Utils
-
-
- Header Files\Utils
-
-
- Header Files\Control
-
-
- Header Files\Utils
-
-
- Header Files\Render
-
-
- Header Files\Render
-
-
- Header Files\Render
-
-
- Header Files\Render
-
-
- Header Files\Render
-
-
- Header Files\Utils
-
-
- Header Files\Render
-
-
- Header Files\Render
-
-
- Header Files\Render
-
-
- Header Files\Render
-
-
- Header Files\Render
-
-
- Header Files\Utils
-
-
+
+
+
+
+ {8fc45193-00aa-405d-8445-6f6619d94834}
+ cpp;c;cxx;rc;def;r;odl;idl;hpj;bat
+
+
+ {b7a95a7b-1188-487e-b75b-a6e6fe6055f7}
+
+
+ {ef45879d-87a5-4d7f-9a92-fdf97778b304}
+
+
+ {f70f6171-d9fd-4189-b1d7-5250e2d6f0fd}
+
+
+ {b7a7aeb7-2adb-4395-b80d-4922bd4efc19}
+ h;hpp;hxx;hm;inl
+
+
+ {3472fe0b-1976-4ada-9c67-2f07b06068d2}
+
+
+ {1a8a45f1-b601-4178-b118-b282f71c4dec}
+
+
+ {6eb00376-1e2b-4faf-9eaa-bdc915049307}
+
+
+ {38a8cc27-53b9-4413-8919-ae7448229ad2}
+
+
+ {101719c8-36d9-454c-be9a-d0f158cf21b4}
+
+
+ {4f978102-2279-42b9-ab99-8a719e9fdf53}
+
+
+ {2069d257-49fd-4283-9999-19e7dda732c8}
+
+
+ {ab59d168-e65b-4cf4-aff6-a2a07e35d058}
+
+
+ {93308611-e7ba-4331-845a-700f5b457c52}
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files\Utils
+
+
+ Source Files\Control
+
+
+ Source Files\Control
+
+
+ Source Files\Control
+
+
+ Source Files\Control
+
+
+ Source Files\Control
+
+
+ Source Files\Control
+
+
+ Source Files\Control
+
+
+ Source Files\Core
+
+
+ Source Files\Core
+
+
+ Source Files\Utils
+
+
+ Source Files\Core
+
+
+ Source Files\Core
+
+
+ Source Files\Core
+
+
+ Source Files\Box
+
+
+ Source Files\Box
+
+
+ Source Files\Box
+
+
+ Source Files\Box
+
+
+ Source Files\Box
+
+
+ Source Files\Utils
+
+
+ Source Files\Animation
+
+
+ Source Files\Core
+
+
+ Source Files\Utils
+
+
+ Source Files\Core
+
+
+ Source Files\Animation
+
+
+ Source Files\Utils
+
+
+ Source Files\Core
+
+
+ Source Files\Utils
+
+
+ Source Files\Control
+
+
+ Source Files\Utils
+
+
+ Source Files\Render
+
+
+ Source Files\Render
+
+
+ Source Files\Render
+
+
+ Source Files\Render
+
+
+ Source Files\Render
+
+
+ Source Files\Utils
+
+
+ Source Files\Render
+
+
+ Source Files\Render
+
+
+ Source Files\Render
+
+
+ Source Files\Render
+
+
+ Source Files\Render
+
+
+ Source Files\Utils
+
+
+ Source Files\Control
+
+
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files\Utils
+
+
+ Header Files\Utils
+
+
+ Header Files\Utils
+
+
+ Header Files\Control
+
+
+ Header Files\Control
+
+
+ Header Files\Control
+
+
+ Header Files\Control
+
+
+ Header Files\Control
+
+
+ Header Files\Control
+
+
+ Header Files\Control
+
+
+ Header Files\Control
+
+
+ Header Files\Control
+
+
+ Header Files\Control
+
+
+ Header Files\Control
+
+
+ Header Files\Core
+
+
+ Header Files\Core
+
+
+ Header Files\Core
+
+
+ Header Files\Utils
+
+
+ Header Files\Utils
+
+
+ Header Files\Core
+
+
+ Header Files\Core
+
+
+ Header Files\Core
+
+
+ Header Files\Box
+
+
+ Header Files\Box
+
+
+ Header Files\Box
+
+
+ Header Files\Box
+
+
+ Header Files\Box
+
+
+ Header Files\Animation
+
+
+ Header Files\Core
+
+
+ Header Files\Utils
+
+
+ Header Files\Core
+
+
+ Header Files\Animation
+
+
+ Header Files\Utils
+
+
+ Header Files\Utils
+
+
+ Header Files\Utils
+
+
+ Header Files\Utils
+
+
+ Header Files\Control
+
+
+ Header Files\Utils
+
+
+ Header Files\Render
+
+
+ Header Files\Render
+
+
+ Header Files\Render
+
+
+ Header Files\Render
+
+
+ Header Files\Render
+
+
+ Header Files\Utils
+
+
+ Header Files\Render
+
+
+ Header Files\Render
+
+
+ Header Files\Render
+
+
+ Header Files\Render
+
+
+ Header Files\Render
+
+
+ Header Files\Utils
+
+
+ Header Files\Control
+
+
\ No newline at end of file