瀏覽代碼

1、成功显示侧边栏;

sat23 4 年之前
父節點
當前提交
85144199bb
共有 100 個文件被更改,包括 887 次插入125 次删除
  1. 19 1
      CTSManager/CTSManager/CTSManager.cpp
  2. 4 0
      CTSManager/CTSManager/CTSManager.vcxproj
  3. 56 41
      CTSManager/CTSManager/CTSManager.vcxproj.filters
  4. 14 11
      CTSManager/CTSManager/Database.cpp
  5. 4 4
      CTSManager/CTSManager/Database.h
  6. 7 6
      CTSManager/CTSManager/DrawerCtrl.cpp
  7. 1 0
      CTSManager/CTSManager/EnBitmap.h
  8. 110 0
      CTSManager/CTSManager/Global.cpp
  9. 18 0
      CTSManager/CTSManager/Global.h
  10. 1 1
      CTSManager/CTSManager/MainFrm.cpp
  11. 497 0
      CTSManager/CTSManager/NavListCtrl.cpp
  12. 88 0
      CTSManager/CTSManager/NavListCtrl.h
  13. 58 57
      CTSManager/CTSManager/Navbar.cpp
  14. 10 4
      CTSManager/CTSManager/Navbar.h
  15. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/Bar.bmp
  16. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/EditBox.bmp
  17. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/FaceBG.bmp
  18. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/IconButton.bmp
  19. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/ItemSelected.bmp
  20. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/MainFigure.bmp
  21. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/MainMenu.bmp
  22. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/MainPanle.bmp
  23. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/TabBG.bmp
  24. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/close.bmp
  25. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/figure.bmp
  26. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/BlankPanel.ico
  27. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/CameraProp.ico
  28. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/Chat.ico
  29. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/ContentsButton.ico
  30. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/Down.ico
  31. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/EmailProp.ico
  32. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/Find.ico
  33. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/FriendButton.ico
  34. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/Game.ico
  35. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/MobileButton.ico
  36. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/MobileProp.ico
  37. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/NetClub.ico
  38. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/NetDiskButton.ico
  39. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/Normal.ico
  40. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/PaiPaiFriendButton.ico
  41. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/QZONE_Bar.ico
  42. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/app.ico
  43. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/brw.ico
  44. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/brw1.ico
  45. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/closeleft.ico
  46. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/color.ico
  47. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/list.ico
  48. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/live.ico
  49. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/mail.ico
  50. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/msg.ico
  51. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/music.ico
  52. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/papa.ico
  53. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/pet.ico
  54. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/search.ico
  55. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/sell.ico
  56. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/sms.ico
  57. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/tool.ico
  58. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/icon/wealth.ico
  59. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/imonline.bmp
  60. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/leftBar.bmp
  61. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/max.bmp
  62. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/min.bmp
  63. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/restore.bmp
  64. 二進制
      CTSManager/CTSManager/Skin/DefaultTheme/updown.bmp
  65. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/1.bmp
  66. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/10.bmp
  67. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/100.bmp
  68. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/101.bmp
  69. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/102.bmp
  70. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/103.bmp
  71. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/104.bmp
  72. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/105.bmp
  73. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/106.bmp
  74. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/107.bmp
  75. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/108.bmp
  76. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/109.bmp
  77. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/11.bmp
  78. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/110.bmp
  79. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/111.bmp
  80. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/112.bmp
  81. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/113.bmp
  82. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/114.bmp
  83. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/115.bmp
  84. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/116.bmp
  85. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/117.bmp
  86. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/118.bmp
  87. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/119.bmp
  88. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/12.bmp
  89. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/120.bmp
  90. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/121.bmp
  91. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/122.bmp
  92. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/123.bmp
  93. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/124.bmp
  94. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/125.bmp
  95. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/126.bmp
  96. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/127.bmp
  97. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/128.bmp
  98. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/129.bmp
  99. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/13.bmp
  100. 二進制
      CTSManager/CTSManager/Skin/NEWFACE/130.bmp

+ 19 - 1
CTSManager/CTSManager/CTSManager.cpp

@@ -74,6 +74,21 @@ BOOL CCTSManagerApp::InitInstance()
 
 	CWinAppEx::InitInstance();
 
+	// 获取模块的目录;
+	TCHAR szDrive[MAX_PATH] = { 0 };
+	TCHAR szDir[MAX_PATH] = { 0 };
+	TCHAR szExt[MAX_PATH] = { 0 };
+	::GetModuleFileName(NULL, Global::g_szCurModulePath, sizeof(Global::g_szCurModulePath) / sizeof(TCHAR));
+	_tsplitpath_s(Global::g_szCurModulePath, szDrive, szDir, Global::g_szFna, szExt);
+#ifdef _DEBUG
+	::GetCurrentDirectory(MAX_PATH, Global::g_szCurModuleDir);
+	_tcscat_s(Global::g_szCurModuleDir, _T("\\"));
+#else
+	_tcscpy_s(Global::g_szCurModuleDir, szDrive);
+	_tcscat_s(Global::g_szCurModuleDir, szDir);
+#endif
+
+	Global::GetConfig();
 
 #if 0 // 用例演示;
 	// 创建mysql对象;
@@ -203,7 +218,10 @@ int CCTSManagerApp::ExitInstance()
 {
 	//TODO: 处理可能已添加的附加资源
 	AfxOleTerm(FALSE);
-
+	CDatabase* pdb = CDatabase::GetInstance();
+	if (pdb)
+		delete pdb;
+	pdb = NULL;
 	return CWinAppEx::ExitInstance();
 }
 

+ 4 - 0
CTSManager/CTSManager/CTSManager.vcxproj

@@ -204,8 +204,10 @@
     <ClInclude Include="EnBitmap.h" />
     <ClInclude Include="FileView.h" />
     <ClInclude Include="framework.h" />
+    <ClInclude Include="Global.h" />
     <ClInclude Include="MainFrm.h" />
     <ClInclude Include="Navbar.h" />
+    <ClInclude Include="NavListCtrl.h" />
     <ClInclude Include="OutputWnd.h" />
     <ClInclude Include="pch.h" />
     <ClInclude Include="PropertiesWnd.h" />
@@ -226,8 +228,10 @@
     <ClCompile Include="DrawerCtrl.cpp" />
     <ClCompile Include="EnBitmap.cpp" />
     <ClCompile Include="FileView.cpp" />
+    <ClCompile Include="Global.cpp" />
     <ClCompile Include="MainFrm.cpp" />
     <ClCompile Include="Navbar.cpp" />
+    <ClCompile Include="NavListCtrl.cpp" />
     <ClCompile Include="OutputWnd.cpp" />
     <ClCompile Include="pch.cpp">
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>

+ 56 - 41
CTSManager/CTSManager/CTSManager.vcxproj.filters

@@ -16,6 +16,9 @@
     <Filter Include="sql">
       <UniqueIdentifier>{d94ee133-5a5e-465b-b4da-ca45d005ac1f}</UniqueIdentifier>
     </Filter>
+    <Filter Include="DockablePane">
+      <UniqueIdentifier>{f474f537-0b0c-4a55-89a6-c8a615c8c92a}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="CTSManager.h">
@@ -42,24 +45,6 @@
     <ClInclude Include="Resource.h">
       <Filter>头文件</Filter>
     </ClInclude>
-    <ClInclude Include="FileView.h">
-      <Filter>头文件</Filter>
-    </ClInclude>
-    <ClInclude Include="ClassView.h">
-      <Filter>头文件</Filter>
-    </ClInclude>
-    <ClInclude Include="ViewTree.h">
-      <Filter>头文件</Filter>
-    </ClInclude>
-    <ClInclude Include="OutputWnd.h">
-      <Filter>头文件</Filter>
-    </ClInclude>
-    <ClInclude Include="PropertiesWnd.h">
-      <Filter>头文件</Filter>
-    </ClInclude>
-    <ClInclude Include="calendarbar.h">
-      <Filter>头文件</Filter>
-    </ClInclude>
     <ClInclude Include="pch.h">
       <Filter>头文件</Filter>
     </ClInclude>
@@ -69,16 +54,40 @@
     <ClInclude Include="Database.h">
       <Filter>sql</Filter>
     </ClInclude>
+    <ClInclude Include="CalendarBar.h">
+      <Filter>DockablePane</Filter>
+    </ClInclude>
+    <ClInclude Include="ClassView.h">
+      <Filter>DockablePane</Filter>
+    </ClInclude>
     <ClInclude Include="DrawerCtrl.h">
-      <Filter>头文件</Filter>
+      <Filter>DockablePane</Filter>
     </ClInclude>
     <ClInclude Include="EnBitmap.h">
-      <Filter>头文件</Filter>
+      <Filter>DockablePane</Filter>
     </ClInclude>
-    <ClInclude Include="TitleBar.h">
-      <Filter>头文件</Filter>
+    <ClInclude Include="FileView.h">
+      <Filter>DockablePane</Filter>
     </ClInclude>
     <ClInclude Include="Navbar.h">
+      <Filter>DockablePane</Filter>
+    </ClInclude>
+    <ClInclude Include="NavListCtrl.h">
+      <Filter>DockablePane</Filter>
+    </ClInclude>
+    <ClInclude Include="OutputWnd.h">
+      <Filter>DockablePane</Filter>
+    </ClInclude>
+    <ClInclude Include="PropertiesWnd.h">
+      <Filter>DockablePane</Filter>
+    </ClInclude>
+    <ClInclude Include="ViewTree.h">
+      <Filter>DockablePane</Filter>
+    </ClInclude>
+    <ClInclude Include="TitleBar.h">
+      <Filter>DockablePane</Filter>
+    </ClInclude>
+    <ClInclude Include="Global.h">
       <Filter>头文件</Filter>
     </ClInclude>
   </ItemGroup>
@@ -98,40 +107,46 @@
     <ClCompile Include="CTSManagerView.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
-    <ClCompile Include="FileView.cpp">
-      <Filter>源文件</Filter>
-    </ClCompile>
     <ClCompile Include="ClassView.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
-    <ClCompile Include="ViewTree.cpp">
-      <Filter>源文件</Filter>
-    </ClCompile>
-    <ClCompile Include="OutputWnd.cpp">
-      <Filter>源文件</Filter>
-    </ClCompile>
-    <ClCompile Include="PropertiesWnd.cpp">
-      <Filter>源文件</Filter>
-    </ClCompile>
-    <ClCompile Include="calendarbar.cpp">
-      <Filter>源文件</Filter>
-    </ClCompile>
     <ClCompile Include="pch.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
     <ClCompile Include="Database.cpp">
       <Filter>sql</Filter>
     </ClCompile>
+    <ClCompile Include="CalendarBar.cpp">
+      <Filter>DockablePane</Filter>
+    </ClCompile>
     <ClCompile Include="DrawerCtrl.cpp">
-      <Filter>源文件</Filter>
+      <Filter>DockablePane</Filter>
     </ClCompile>
     <ClCompile Include="EnBitmap.cpp">
-      <Filter>源文件</Filter>
+      <Filter>DockablePane</Filter>
     </ClCompile>
-    <ClCompile Include="TitleBar.cpp">
-      <Filter>源文件</Filter>
+    <ClCompile Include="FileView.cpp">
+      <Filter>DockablePane</Filter>
     </ClCompile>
     <ClCompile Include="Navbar.cpp">
+      <Filter>DockablePane</Filter>
+    </ClCompile>
+    <ClCompile Include="NavListCtrl.cpp">
+      <Filter>DockablePane</Filter>
+    </ClCompile>
+    <ClCompile Include="OutputWnd.cpp">
+      <Filter>DockablePane</Filter>
+    </ClCompile>
+    <ClCompile Include="PropertiesWnd.cpp">
+      <Filter>DockablePane</Filter>
+    </ClCompile>
+    <ClCompile Include="TitleBar.cpp">
+      <Filter>DockablePane</Filter>
+    </ClCompile>
+    <ClCompile Include="ViewTree.cpp">
+      <Filter>DockablePane</Filter>
+    </ClCompile>
+    <ClCompile Include="Global.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
   </ItemGroup>

+ 14 - 11
CTSManager/CTSManager/Database.cpp

@@ -492,11 +492,11 @@ BOOL CDatabase::QuerySoc(std::vector<STSOC>& vtSoc)
 }
 
 
-BOOL CDatabase::InsertBrand(const STBranch& brand)
+BOOL CDatabase::InsertBrand(const STBrand& brand)
 {
 	CHECKDB;
 	TCHAR szSql[MAX_PATH] = { 0 };
-	_stprintf_s(szSql, INSER_BRAND, brand.name.c_str(), brand.note.c_str());
+	_stprintf_s(szSql, INSER_BRAND, brand.name.c_str(), brand.fav_cfg.c_str(), brand.local_cfg.c_str(), brand.apps_cfg.c_str(), brand.note.c_str());
 	if (0 != mysql_query(m_pConn, szSql)) {
 #ifdef _DEBUG
 		_dprintf(_T("InsertBrand error=%s\n"), m_pError ? m_pError : "");
@@ -507,11 +507,11 @@ BOOL CDatabase::InsertBrand(const STBranch& brand)
 	return TRUE;
 }
 
-BOOL CDatabase::InsertBrand(std::string name, std::string note)
+BOOL CDatabase::InsertBrand(std::string name, std::string fav_cfg, std::string local_cfg, std::string apps_cfg, std::string note)
 {
 	CHECKDB;
 	TCHAR szSql[MAX_PATH] = { 0 };
-	_stprintf_s(szSql, INSER_BRAND, name.c_str(), note.c_str());
+	_stprintf_s(szSql, INSER_BRAND, name.c_str(), fav_cfg.c_str(), local_cfg.c_str(), apps_cfg.c_str(), note.c_str());
 	if (0 != mysql_query(m_pConn, szSql)) {
 #ifdef _DEBUG
 		_dprintf(_T("InsertBrand error=%s\n"), m_pError ? m_pError : "");
@@ -537,11 +537,11 @@ BOOL CDatabase::DeleteBrand(std::string name)
 	return TRUE;
 }
 
-BOOL CDatabase::UpdateBrand(std::string name, const STBranch& brand)
+BOOL CDatabase::UpdateBrand(std::string name, const STBrand& brand)
 {
 	CHECKDB;
 	TCHAR szSql[MAX_PATH] = { 0 };
-	_stprintf_s(szSql, MOD_BRAND, brand.name.c_str(), brand.note.c_str(), name.c_str());
+	_stprintf_s(szSql, MOD_BRAND, brand.name.c_str(), brand.fav_cfg.c_str(), brand.local_cfg.c_str(), brand.apps_cfg.c_str(), brand.note.c_str(), name.c_str());
 	if (0 != mysql_query(m_pConn, szSql)) {
 #ifdef _DEBUG
 		_dprintf(_T("UpdateBrand error=%s\n"), m_pError ? m_pError : "");
@@ -552,7 +552,7 @@ BOOL CDatabase::UpdateBrand(std::string name, const STBranch& brand)
 	return TRUE;
 }
 
-BOOL CDatabase::QueryBrand(std::vector<STBranch>& vtBrand)
+BOOL CDatabase::QueryBrand(std::vector<STBrand>& vtBrand)
 {
 	CHECKDB;
 	if (0 != mysql_query(m_pConn, QUERY_BRAND)) {
@@ -575,7 +575,7 @@ BOOL CDatabase::QueryBrand(std::vector<STBranch>& vtBrand)
 	// 统计表字段;
 	unsigned int nLen = mysql_num_fields(pData);
 	// 字段长度是否一致;
-	if (nLen != 2) {
+	if (nLen != 5) {
 		mysql_free_result(pData);
 		return FALSE;
 	}
@@ -591,9 +591,12 @@ BOOL CDatabase::QueryBrand(std::vector<STBranch>& vtBrand)
 	// 遍历数据;
 	MYSQL_ROW row;
 	while ((row = mysql_fetch_row(pData)) != NULL) {
-		STBranch brand;
+		STBrand brand;
 		brand.name = row[0];
-		brand.note = row[1];
+		brand.fav_cfg = row[1];
+		brand.local_cfg = row[2];
+		brand.apps_cfg = row[3];
+		brand.note = row[4];
 		vtBrand.push_back(brand);
 	}
 
@@ -1528,7 +1531,7 @@ void DBTest()
 		if (1)
 		{
 			// 新增品牌;
-			CDatabase::GetInstance()->InsertBrand(_T("SCBC"), _T("SCBC"));
+			CDatabase::GetInstance()->InsertBrand(_T("SCBC"), _T(""), _T(""), _T(""), _T("SCBC"));
 			CDatabase::GetInstance()->InsertBrand(_T("MICROMAX"), _T(""));
 			CDatabase::GetInstance()->InsertBrand(_T("ARTEL"), _T(""));
 			CDatabase::GetInstance()->InsertBrand(_T("PANASONIC"), _T(""));

+ 4 - 4
CTSManager/CTSManager/Database.h

@@ -90,11 +90,11 @@ public:
 	BOOL QuerySoc(std::vector<STSOC>& vtSoc);
 
 	// Æ·ÅÆ±í;
-	BOOL InsertBrand(const STBranch& brand);
-	BOOL InsertBrand(std::string name, std::string note);
+	BOOL InsertBrand(const STBrand& brand);
+	BOOL InsertBrand(std::string name, std::string fav_cfg = _T(""), std::string local_cfg = _T(""), std::string apps_cfg = _T(""), std::string note = _T(""));
 	BOOL DeleteBrand(std::string name);
-	BOOL UpdateBrand(std::string name, const STBranch& brand);
-	BOOL QueryBrand(std::vector<STBranch>& vtBrand);
+	BOOL UpdateBrand(std::string name, const STBrand& brand);
+	BOOL QueryBrand(std::vector<STBrand>& vtBrand);
 	// µ¼Èë/µ¼³öÆ·ÅÆlogo;
 	BOOL ImportBrandLogo(std::string brand, std::string file);
 	BOOL ExportBrandLogo(std::string brand, std::string file);

+ 7 - 6
CTSManager/CTSManager/DrawerCtrl.cpp

@@ -27,7 +27,7 @@ CDrawerCtrl::CDrawerCtrl()
 	nFolderHeight = 20;
 
 	//当前选中目录索引
-	iSelFolder = 1;
+	iSelFolder = -1;
 	//最后高亮的目录索引
 	iLastFolderHighlighted = -1;
 	//当前鼠标滑过的目录
@@ -69,6 +69,8 @@ END_MESSAGE_MAP()
 
 void CDrawerCtrl::SetFolderImage(LPCTSTR lpszPath)
 {
+	ASSERT(lpszPath);
+	ASSERT(PathFileExists(lpszPath));
 	CEnBitmap bmpTemp;
 	bmpTemp.LoadImage(lpszPath);
 	bmpTemp.DrawImage(m_bmpNormalFolder, 1, 1, 1, 2);
@@ -325,7 +327,7 @@ BOOL CDrawerCtrl::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
 	int index, ht = HitTestEx(pt, index);
 	if (ht == htFolder)
 	{
-		SetCursor(hHandCursor);
+		//SetCursor(hHandCursor);
 		return true;
 	}
 	return CWnd::OnSetCursor(pWnd, nHitTest, message);
@@ -333,7 +335,6 @@ BOOL CDrawerCtrl::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
 
 void CDrawerCtrl::OnSize(UINT nType, int cx, int cy)
 {
-
 	CWnd::OnSize(nType, cx, cy);
 
 	int t, max = GetFolderCount();
@@ -352,7 +353,8 @@ CWnd* CDrawerCtrl::GetFolderChild(int iFolder)
 {
 	if (GetFolderCount())
 	{
-		if (iFolder < 0) iFolder = iSelFolder;
+		if (iFolder < 0)
+			iFolder = iSelFolder == -1 ? 0 : iSelFolder;
 
 		CBm_arFolder* pbf = (CBm_arFolder*)m_arFolder.GetAt(iFolder);
 		return pbf->pChild;
@@ -447,8 +449,7 @@ void CDrawerCtrl::OnTimer(UINT_PTR nIDEvent)
 
 		int ht = HitTestEx(pt, iHoverFolder);
 
-		if (ht != htFolder ||
-			!(rc.PtInRect(pt)))
+		if (ht != htFolder || !(rc.PtInRect(pt)))
 		{
 			HighlightFolder(-1);
 			KillTimer(1);

+ 1 - 0
CTSManager/CTSManager/EnBitmap.h

@@ -32,6 +32,7 @@ public:
 	{
 		return GetWidth();
 	}
+
 	int	 GetWidth()
 	{
 		BITMAP bm;

+ 110 - 0
CTSManager/CTSManager/Global.cpp

@@ -0,0 +1,110 @@
+#include "pch.h"
+#include "Global.h"
+#include <direct.h>
+#include <SetupAPI.h>
+#include <InitGuid.h>
+#include <WinIoCtl.h>
+#pragma comment(lib, "SetupAPI.lib")
+#include <locale.h>
+#include <stdlib.h>
+//#include <time.h> //或者 #include <ctime>
+#include <ctime>
+#include <io.h>
+#pragma comment(lib,"version.lib")
+
+
+namespace Global
+{
+	// 文件路径;
+	TCHAR g_szCurModuleDir[MAX_PATH] = { 0 };
+	TCHAR g_szCurModulePath[MAX_PATH] = { 0 };
+	TCHAR g_szFna[MAX_PATH] = { 0 };
+	TCHAR g_szConfig[MAX_PATH] = { 0 };
+	// 数据库配置;
+	TCHAR g_szDBAddress[MAX_PATH] = { 0 };
+	TCHAR g_szDBName[MAX_PATH] = { 0 };
+	TCHAR g_szDBAccount[MAX_PATH] = { 0 };
+	TCHAR g_szDBPassword[MAX_PATH] = { 0 };
+
+	//////////////////////////////////////////////////////////////////////////
+	// 全局函数;
+
+	void GetConfig()
+	{
+		TCHAR szConfigpath[MAX_PATH] = { 0 };
+		_stprintf_s(szConfigpath, _T("%s%s.ini"), g_szCurModuleDir, g_szFna);
+		_tcscpy_s(g_szConfig, szConfigpath);
+
+		TCHAR szValue[MAX_PATH] = { 0 };
+		GetPrivateProfileString(_T("mysql"), _T("dbname"), NULL, g_szDBName, MAX_PATH, szConfigpath);
+		GetPrivateProfileString(_T("mysql"), _T("dbaddress"), NULL, g_szDBAddress, MAX_PATH, szConfigpath);
+		GetPrivateProfileString(_T("mysql"), _T("dbaccount"), NULL, g_szDBAccount, MAX_PATH, szConfigpath);
+		GetPrivateProfileString(_T("mysql"), _T("dbpassword"), NULL, g_szDBPassword, MAX_PATH, szConfigpath);
+	}
+
+	/************************************************************************/
+	/*  函数:WriteTextLog[7/28/2009 Jeff];
+	/*  描述:写文本日志;
+	/*  参数:;
+	/*  	[IN] :;
+	/*  返回:void;
+	/*  注意:;
+	/*  示例:;
+	/*
+	/*  修改:;
+	/*  日期:;
+	/*  内容:;
+	/************************************************************************/
+	void WriteTextLog(const TCHAR* format, ...)
+	{
+		// 解析出日志路径;
+		TCHAR szlogpath[MAX_PATH] = { 0 };
+		_stprintf_s(szlogpath, _T("%s%s.txt"), g_szCurModuleDir, g_szFna);
+		// 打开或创建文件;
+		FILE* fp = NULL;
+		//if (_taccess(szlogpath, 0) != -1)
+#ifndef UNICODE
+		if (_access(szlogpath, 0) != -1)
+#else
+		if (_taccess(szlogpath, 0) != -1)
+#endif
+		{// 存在;
+			if (0 == _tfopen_s(&fp, szlogpath, _T("a+")))
+				// 移动到末尾;
+				fseek(fp, 0, SEEK_END);
+		}
+		else
+		{// 不存在;
+			_tfopen_s(&fp, szlogpath, _T("w+"));
+		}
+
+		if (fp == NULL)
+			return;
+
+		// 格式化前设置语言区域;
+		TCHAR* old_locale = _tcsdup(_tsetlocale(LC_CTYPE, NULL));
+		_tsetlocale(LC_CTYPE, _T("chs"));//设定中文;
+
+		// 格式化日志内容;
+		va_list		args = NULL;
+		int			len = 0;
+		TCHAR* buffer = NULL;
+		va_start(args, format);
+		// _vscprintf doesn't count. terminating '\0'
+		len = _vsctprintf(format, args) + 1;
+		buffer = (TCHAR*)malloc(len * sizeof(TCHAR));
+		_vstprintf_s(buffer, len, format, args);
+		// 将日志内容输入到文件中;
+		// 获取今年年份;
+		__time64_t gmt = time(NULL);// 获取当前日历时间(1900-01-01开始的Unix时间戳);
+		struct tm gmtm = { 0 };
+		localtime_s(&gmtm, &gmt); // 时间戳转成本地时间;
+		_ftprintf(fp, _T("%04d-%02d-%02d %02d:%02d:%02d %s\n"), gmtm.tm_year + 1990, gmtm.tm_mon + 1, gmtm.tm_mday, gmtm.tm_hour, gmtm.tm_min, gmtm.tm_sec, buffer);
+
+		// 关闭文件,释放资源并设置回原语言区域;
+		free(buffer);
+		fclose(fp);
+		_tsetlocale(LC_CTYPE, old_locale);
+		free(old_locale);//还原区域设定;
+	}
+};

+ 18 - 0
CTSManager/CTSManager/Global.h

@@ -0,0 +1,18 @@
+#pragma once
+namespace Global
+{
+	// Îļþ·¾¶;
+	extern TCHAR g_szCurModuleDir[MAX_PATH];
+	extern TCHAR g_szCurModulePath[MAX_PATH];
+	extern TCHAR g_szFna[MAX_PATH];
+	extern TCHAR g_szConfig[MAX_PATH];
+	// Êý¾Ý¿âÅäÖÃ;
+	extern TCHAR g_szDBAddress[MAX_PATH];
+	extern TCHAR g_szDBName[MAX_PATH];
+	extern TCHAR g_szDBAccount[MAX_PATH];
+	extern TCHAR g_szDBPassword[MAX_PATH];
+
+	extern void GetConfig();
+	extern void WriteTextLog(const TCHAR* format, ...);
+};
+

+ 1 - 1
CTSManager/CTSManager/MainFrm.cpp

@@ -287,7 +287,7 @@ BOOL CMainFrame::CreateDockingWindows()
 	bNameValid = strClassView.LoadString(IDS_CLASS_VIEW);
 	ASSERT(bNameValid);
 	// 如何禁止改变大小:将最后2个默认参数全改为,将且删除注册表“应用程序向导生成的本地应用程序”才会生效;
-	if (!m_wndNavBar.Create(strClassView, this, CRect(0, 0, 200, 200), FALSE, ID_VIEW_CLASSVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT, 0, 0))
+	if (!m_wndNavBar.Create(strClassView, this, CRect(0, 0, 300, 200), FALSE, ID_VIEW_CLASSVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT, 0, 0))
 	{
 		TRACE0("未能创建“文件视图”窗口\n");
 		return FALSE; // 未能创建

+ 497 - 0
CTSManager/CTSManager/NavListCtrl.cpp

@@ -0,0 +1,497 @@
+#include "pch.h"
+#include "NavListCtrl.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+CNavListCtrl::CNavListCtrl()
+{
+	m_crHighlight = RGB(254, 242, 205);
+	m_crHighlightBorder = RGB(233, 175, 0);
+	m_crHover = RGB(7, 162, 254);
+	nHoverItem = -1;
+	nLastHoverItem = -1;
+	m_bmpItemSelected.LoadImage("Skin\\DefaultTheme\\ItemSelected.bmp");
+	m_bmpFaceBG.LoadImage("Skin\\DefaultTheme\\FaceBG.bmp");
+
+	m_hTailIconCamera = (HICON)::LoadImage(AfxGetApp()->m_hInstance, "Skin\\DefaultTheme\\icon\\CameraProp.ico", IMAGE_ICON, 14, 14, LR_LOADFROMFILE);
+	m_hTailIconEmail = (HICON)::LoadImage(AfxGetApp()->m_hInstance, "Skin\\DefaultTheme\\icon\\EmailProp.ico", IMAGE_ICON, 14, 14, LR_LOADFROMFILE);
+	m_hTailIconMobile = (HICON)::LoadImage(AfxGetApp()->m_hInstance, "Skin\\DefaultTheme\\icon\\MobileProp.ico", IMAGE_ICON, 14, 14, LR_LOADFROMFILE);
+}
+
+CNavListCtrl::~CNavListCtrl()
+{
+	if (m_hTailIconCamera)
+		::DestroyIcon(m_hTailIconCamera);
+	if (m_hTailIconEmail)
+		::DestroyIcon(m_hTailIconEmail);
+	if (m_hTailIconMobile)
+		::DestroyIcon(m_hTailIconMobile);
+}
+
+
+BEGIN_MESSAGE_MAP(CNavListCtrl, CListCtrl)
+	//{{AFX_MSG_MAP(CNavListCtrl)
+	ON_WM_NCCALCSIZE()
+	ON_WM_MOUSEMOVE()
+	ON_WM_MEASUREITEM_REFLECT()
+	ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnNMCustomdraw)
+	ON_WM_LBUTTONDOWN()
+	//}}AFX_MSG_MAP
+	ON_WM_SIZE()
+	ON_WM_ERASEBKGND()
+	ON_WM_PAINT()
+	ON_WM_TIMER()
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CNavListCtrl message handlers
+
+void CNavListCtrl::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp)
+{
+	// TODO: Add your message handler code here and/or call default
+	ShowScrollBar(SB_HORZ, FALSE);
+	CListCtrl::OnNcCalcSize(bCalcValidRects, lpncsp);
+}
+
+
+void CNavListCtrl::OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult)
+{
+	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
+
+	LPNMLVCUSTOMDRAW lpLVCustomDraw = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
+
+	lpLVCustomDraw->clrText = RGB(58, 25, 255); // white text
+	//lpLVCustomDraw->clrTextBk = RGB(222,0,0); 
+
+	/*
+
+	if(lpLVCustomDraw->nmcd.dwDrawStage==CDDS_PREPAINT)
+		*pResult=CDRF_NOTIFYITEMDRAW;
+	if(lpLVCustomDraw->nmcd.dwDrawStage==CDDS_ITEMPREPAINT)
+	{
+		for(int i=0;i<10;i++)
+		{
+			if(lpLVCustomDraw->nmcd.dwItemSpec==(unsigned)i)
+			{
+				lpLVCustomDraw->clrText=RGB(255,0,0);
+				lpLVCustomDraw->clrTextBk=RGB(255,255,0);
+			}
+		}
+	}
+	*/
+
+
+	// TODO: 在此添加控件通知处理程序代码
+	* pResult = 0;
+	*pResult |= CDRF_NOTIFYPOSTPAINT;
+	*pResult |= CDRF_NOTIFYITEMDRAW;
+	*pResult |= CDRF_NOTIFYSUBITEMDRAW;
+}
+
+int CNavListCtrl::InsertItem(int nItem, LPCTSTR szItemText, int nImageIndex, LUSERITEM* UserInfo)
+{
+	DEQUELVITEM* pDeqListItem = &m_DequeList;
+	if (UserInfo)
+		pDeqListItem->push_back(*UserInfo);
+	nItem = CListCtrl::InsertItem(nItem, szItemText, nImageIndex);
+	return nItem;
+
+}
+
+void CNavListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
+{
+	CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
+	//CRect rcItem(lpDrawItemStruct->rcItem);
+	int nItem = lpDrawItemStruct->itemID;
+	CImageList* pImageList;
+
+	// Save dc state
+	int nSavedDC = pDC->SaveDC();
+
+	// Get item image and state info
+	LV_ITEM lvi;
+	lvi.mask = LVIF_IMAGE | LVIF_STATE;
+	lvi.iItem = nItem;
+	lvi.iSubItem = 0;
+	lvi.stateMask = 0xFFFF;		// get all state flags
+	GetItem(&lvi);
+
+	// Should the item be highlighted
+	BOOL bHighlight = ((lvi.state & LVIS_DROPHILITED)
+		|| ((lvi.state & LVIS_SELECTED)
+			&& ((GetFocus() == this)
+				|| (GetStyle() & LVS_SHOWSELALWAYS)
+				)
+			)
+		);
+
+	// Get rectangles for drawing
+	CRect rcClient;
+	GetClientRect(&rcClient);
+
+	CRect rcBounds, rcLabel, rcIcon;
+	GetItemRect(nItem, rcBounds, LVIR_BOUNDS);
+	GetItemRect(nItem, rcLabel, LVIR_LABEL);
+	GetItemRect(nItem, rcIcon, LVIR_ICON);
+	CRect rcCol(rcBounds);
+
+	POINT pt;
+	GetCursorPos(&pt);
+	ScreenToClient(&pt);
+
+	CString sLabel = GetItemText(nItem, 0);
+
+	// Labels are offset by a certain amount  
+	// This offset is related to the width of a space character
+	int offset = pDC->GetTextExtent(_T(" "), 1).cx * 2;
+
+	CRect rcHighlight;
+
+	int nExt;
+	switch (m_nHighlight)
+	{
+	case 0:
+		nExt = pDC->GetOutputTextExtent(sLabel).cx + offset;
+		rcHighlight = rcLabel;
+		if (rcLabel.left + nExt < rcLabel.right)
+			rcHighlight.right = rcLabel.left + nExt;
+		break;
+	case 1:
+		rcHighlight = rcBounds;
+		rcHighlight.left = rcLabel.left;
+		break;
+	default:
+		rcHighlight = rcBounds;
+		rcHighlight.left = rcBounds.left + 1;
+		rcHighlight.right = rcClient.right - 2;
+		break;
+	}
+
+	// 画背景
+	CRect rcIconBG(rcIcon);
+	rcIconBG.right += 12;
+
+	CEnBitmap bmpFaceBG;
+	if (bHighlight)
+	{
+		//nItem是当前高亮的项
+		if (m_bmpItemSelected.m_hObject != NULL)
+			m_bmpItemSelected.ExtendDraw(pDC, rcHighlight, 20, 10, TRUE);
+
+		//画图标背景
+		if (m_bmpFaceBG.m_hObject != NULL)
+		{
+			m_bmpFaceBG.DrawImage(bmpFaceBG, 1, 1, 2, 1);
+			bmpFaceBG.ExtendDraw(pDC, rcIconBG, 20, 10);
+		}
+	}
+	else
+	{
+		//if(nHoverItem == nItem)
+		//	pDC->FillRect(rcHighlight, &CBrush(m_crHover));
+		//else
+		pDC->FillRect(rcHighlight, &CBrush(RGB(255, 255, 255)));
+
+		//画图标背景
+		if (m_bmpFaceBG.m_hObject != NULL)
+		{
+			m_bmpFaceBG.DrawImage(bmpFaceBG, 2, 1, 2, 1);
+			bmpFaceBG.ExtendDraw(pDC, rcIconBG, 20, 10);
+		}
+	}
+	// Draw normal and overlay icon
+	pImageList = GetImageList(LVSIL_SMALL);
+	if (pImageList)
+	{
+		UINT nOvlImageMask = lvi.state & LVIS_OVERLAYMASK;
+
+		pImageList->Draw(pDC, lvi.iImage,
+			CPoint(rcIcon.left + 6, rcIcon.top + 6), ILD_TRANSPARENT | nOvlImageMask);
+	}
+
+
+	// Draw item label - Column 0
+	rcLabel.top += 5;
+	rcLabel.left += offset / 2 + 7;
+	rcLabel.right -= offset;
+
+	pDC->DrawText(sLabel, -1, rcLabel, DT_LEFT | DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP
+		| DT_END_ELLIPSIS);
+
+
+	LUSERITEM userInfo;
+	GetUserItemInfo(sLabel, &userInfo);
+	CSize size = pDC->GetTextExtent(sLabel);
+	if (userInfo.szUserID != "")
+	{
+		sLabel = userInfo.szNoticeMsg;
+
+		rcLabel.top = rcLabel.top + size.cy + 3;
+		rcLabel.right = rcClient.right;
+		//if(rcLabel.PtInRect(pt))
+		//{
+		//	pDC->SetTextColor(RGB(10,255,10));
+		//}
+		//else
+		//{
+		pDC->SetTextColor(GetSysColor(COLOR_BTNSHADOW));
+		//}
+		pDC->DrawText(sLabel, rcLabel, DT_SINGLELINE | DT_LEFT | DT_END_ELLIPSIS);
+	}
+
+	//Draw TailIcon
+	DWORD nStyle = GetItemData(nItem);
+	CRect rcCamera = GetTailIconRect(nItem, TVS_CAMERA);
+	if ((nStyle & TVS_CAMERA) && (m_hTailIconCamera != NULL))
+	{
+		if (rcCamera.PtInRect(pt))
+		{
+			pDC->FillSolidRect(rcCamera, m_crHighlight);
+			pDC->Draw3dRect(rcCamera, m_crHighlightBorder, m_crHighlightBorder);
+		}
+		::DrawIconEx(*pDC, rcCamera.left + 2, rcCamera.top + 2, m_hTailIconCamera, 14, 14, 0, NULL, DI_NORMAL);
+	}
+
+	CRect rcEmail = GetTailIconRect(nItem, TVS_EMAIL);
+	if ((nStyle & TVS_EMAIL) && (m_hTailIconEmail != NULL))
+	{
+		if (rcEmail.PtInRect(pt))
+		{
+			pDC->FillSolidRect(rcEmail, m_crHighlight);
+			pDC->Draw3dRect(rcEmail, m_crHighlightBorder, m_crHighlightBorder);
+		}
+		::DrawIconEx(*pDC, rcEmail.left + 2, rcEmail.top + 2, m_hTailIconEmail, 14, 14, 0, NULL, DI_NORMAL);
+	}
+
+	CRect rcMobile = GetTailIconRect(nItem, TVS_MOBILE);
+	if ((nStyle & TVS_MOBILE) && (m_hTailIconMobile != NULL))
+	{
+		if (rcMobile.PtInRect(pt))
+		{
+			pDC->FillSolidRect(rcMobile, m_crHighlight);
+			pDC->Draw3dRect(rcMobile, m_crHighlightBorder, m_crHighlightBorder);
+		}
+		::DrawIconEx(*pDC, rcMobile.left + 2, rcMobile.top + 2, m_hTailIconMobile, 14, 14, 0, NULL, DI_NORMAL);
+	}
+
+	// Draw labels for remaining columns
+	LV_COLUMN lvc;
+	lvc.mask = LVCF_FMT | LVCF_WIDTH;
+
+	if (m_nHighlight == 0)		// Highlight only first column
+	{
+		pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
+		pDC->SetBkColor(::GetSysColor(COLOR_WINDOW));
+	}
+
+	rcBounds.right = rcHighlight.right > rcBounds.right ? rcHighlight.right + 10 :
+		rcBounds.right + 10;
+
+	for (int nColumn = 1; GetColumn(nColumn, &lvc); nColumn++)
+	{
+		rcCol.left = rcCol.right;
+		rcCol.right += lvc.cx;
+
+		//Draw the background if needed
+	   //if( m_nHighlight == HIGHLIGHT_NORMAL )
+	   //	pDC->FillRect(rcCol, &CBrush(::GetSysColor(COLOR_WINDOW)));
+
+		sLabel = GetItemText(nItem, nColumn);
+		if (sLabel.GetLength() == 0)
+			continue;
+
+		// Get the text justification
+		UINT nJustify = DT_LEFT;
+		switch (lvc.fmt & LVCFMT_JUSTIFYMASK)
+		{
+		case LVCFMT_RIGHT:
+			nJustify = DT_RIGHT;
+			break;
+		case LVCFMT_CENTER:
+			nJustify = DT_CENTER;
+			break;
+		default:
+			break;
+		}
+
+		rcLabel = rcCol;
+		rcLabel.left += offset;
+		rcLabel.right -= offset;
+
+		pDC->DrawText(sLabel, -1, rcLabel, nJustify | DT_SINGLELINE |
+			DT_NOPREFIX | DT_VCENTER | DT_END_ELLIPSIS);
+	}
+
+	// Restore dc
+	pDC->RestoreDC(nSavedDC);
+
+
+}
+
+CRect CNavListCtrl::GetTailIconRect(int nItem, DWORD dwServeFlag)
+{
+	CRect rcIcon, rcClient;
+	GetItemRect(nItem, rcIcon, LVIR_ICON);
+	GetClientRect(&rcClient);
+
+	DWORD nStyle = GetItemData(nItem);
+	switch (nStyle & dwServeFlag)
+	{
+	case TVS_CAMERA:
+	{
+		rcIcon.left = rcClient.right - 22;
+		rcIcon.right = rcIcon.left + 18;
+		rcIcon.bottom = rcIcon.top + 18;
+	}
+	break;
+	case TVS_EMAIL:
+	{
+		rcIcon.left = rcIcon.right + 10;
+		rcIcon.right = rcIcon.left + 18;
+		rcIcon.top = rcIcon.bottom - 20;
+		rcIcon.bottom = rcIcon.top + 18;
+	}
+	break;
+	case TVS_MOBILE:
+	{
+		rcIcon.left = rcIcon.right + 10;
+		if (nStyle & TVS_EMAIL)
+			rcIcon.left += 18;
+		rcIcon.right = rcIcon.left + 18;
+		rcIcon.top = rcIcon.bottom - 20;
+		rcIcon.bottom = rcIcon.top + 18;
+	}
+	break;
+	default:
+		rcIcon.SetRectEmpty();
+		break;
+	}
+	return rcIcon;
+}
+BOOL CNavListCtrl::GetUserItemInfo(LPCTSTR szItemText, LUSERITEM* userInfo)
+{
+	ASSERT(userInfo != NULL);
+
+	BOOL bRet = FALSE;
+	DEQUELVITEM* pDeqListItem = &m_DequeList;
+
+	DEQUELVITEM::iterator it, itbegin = pDeqListItem->begin(), itend = pDeqListItem->end();
+	for (it = itbegin; it != itend; it++)
+	{
+		if (it->szUserID == szItemText)
+		{
+			*userInfo = (LUSERITEM)*it;	//复制结构数据到userInof;
+			bRet = TRUE;
+			break;
+		}
+	}
+	return bRet;
+
+}
+
+void CNavListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
+{
+	int nItem = HitTest(point);
+	if (nItem != -1)
+	{
+		CString strTip;
+		CRect rcServe;
+		for (DWORD dwFlag = TVS_CAMERA;dwFlag < TVS_ONLINEUSER;dwFlag++)
+		{
+			rcServe = GetTailIconRect(nItem, dwFlag);
+			if (rcServe.PtInRect(point))
+			{
+				strTip.Format("位置:nItem=%d,dwServeFlag=%#0.8x", nItem, dwFlag);
+				break;
+			}
+		}
+		if (!strTip.IsEmpty())
+			MessageBox(strTip);
+	}
+	CListCtrl::OnLButtonDown(nFlags, point);
+}
+
+//调整行高
+void CNavListCtrl::MeasureItem(LPMEASUREITEMSTRUCT lpMis)
+{
+	lpMis->itemHeight = 52;
+}
+void CNavListCtrl::OnSize(UINT nType, int cx, int cy)
+{
+	CListCtrl::OnSize(nType, cx, cy);
+	SetColumnWidth(0, cx);
+	RedrawWindow();
+	// TODO: 在此处添加消息处理程序代码
+}
+
+BOOL CNavListCtrl::OnEraseBkgnd(CDC* pDC)
+{
+	// TODO: 在此添加消息处理程序代码和/或调用默认值
+	return TRUE;
+	//return CListCtrl::OnEraseBkgnd(pDC);
+}
+
+void CNavListCtrl::OnPaint()
+{
+	CPaintDC dc(this); // device context for painting
+
+	CRect rcClient;
+	GetClientRect(&rcClient);
+
+	CDC memdc;
+	memdc.CreateCompatibleDC(&dc);
+	CBitmap bitmap;
+	bitmap.CreateCompatibleBitmap(&dc, rcClient.Width(), rcClient.Height());
+	memdc.SelectObject(&bitmap);
+
+	memdc.FillSolidRect(rcClient, RGB(255, 255, 255));
+	CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC, 0);
+
+	dc.BitBlt(rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height(), &memdc,
+		0, 0, SRCCOPY);
+}
+
+void CNavListCtrl::OnMouseMove(UINT nFlags, CPoint point)
+{
+	// TODO: Add your message handler code here and/or call default
+	nHoverItem = HitTest(point);
+	if (nLastHoverItem >= 0)
+	{
+		CRect rcItem;
+		GetItemRect(nLastHoverItem, rcItem, LVIR_BOUNDS);
+		InvalidateRect(rcItem);
+	}
+	nLastHoverItem = nHoverItem;
+	if (nHoverItem >= 0)
+	{
+		CRect rcItem;
+		GetItemRect(nHoverItem, rcItem, LVIR_BOUNDS);
+		InvalidateRect(rcItem);
+		//SetTimer(1,100,NULL);
+	}
+	CListCtrl::OnMouseMove(nFlags, point);
+}
+
+void CNavListCtrl::OnTimer(UINT_PTR nIDEvent)
+{
+	// TODO: 在此添加消息处理程序代码和/或调用默认值
+	if (nIDEvent == 1)
+	{
+		CPoint pt(GetMessagePos()); ScreenToClient(&pt);
+		CRect rc; GetClientRect(&rc);
+		if (!rc.PtInRect(pt))
+		{
+			nHoverItem = -1;
+			CRect rcItem;
+			GetItemRect(nLastHoverItem, rcItem, LVIR_BOUNDS);
+			InvalidateRect(rcItem);
+			KillTimer(1);
+		}
+	}
+
+	CListCtrl::OnTimer(nIDEvent);
+}

+ 88 - 0
CTSManager/CTSManager/NavListCtrl.h

@@ -0,0 +1,88 @@
+#ifndef __NAVLISTCTRL__
+#define __NAVLISTCTRL__
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include <deque>
+#include <atlimage.h> 
+#include "EnBitmap.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CNavListCtrl window
+struct LUSERITEM
+{
+	CString		szUserID;
+	CString		szUserName;
+	CString		szIPAddress;
+	CString		szServerAddress;
+	CString		szNoticeMsg;
+	BOOL		bOnline;
+	int			nHeadImageIndex;
+};
+
+typedef std::deque<LUSERITEM>	DEQUELVITEM;
+
+
+class CNavListCtrl : public CListCtrl
+{
+	// Construction
+public:
+	CNavListCtrl();
+
+	enum {
+		TVS_CAMERA = 1 << 0,
+		TVS_EMAIL = 1 << 1,
+		TVS_MOBILE = 1 << 2,
+		TVS_ONLINEUSER = 1 << 3
+	};
+	// Attributes
+public:
+	COLORREF	m_crHighlight;
+	COLORREF	m_crHighlightBorder;
+	COLORREF	m_crHover;
+	CEnBitmap	m_bitmap;
+	// Operations
+public:
+
+	void SetBackBitmap(LPCTSTR lpszImage) {};
+	int InsertItem(int nItem, LPCTSTR szItemText, int nImageIndex, LUSERITEM* UserInfo = NULL);
+	BOOL GetUserItemInfo(LPCTSTR szItemText, LUSERITEM* userInfo);
+	CRect GetTailIconRect(int nItem, DWORD dwServeFlag);
+
+	// Implementation
+public:
+	virtual ~CNavListCtrl();
+	int m_nHighlight;
+
+	virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
+	// Generated message map functions
+protected:
+	//{{AFX_MSG(CNavListCtrl)
+	afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
+	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
+	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
+	afx_msg void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
+	//}}AFX_MSG
+	afx_msg void OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult);
+	afx_msg void OnSize(UINT nType, int cx, int cy);
+	DECLARE_MESSAGE_MAP()
+
+private:
+	DEQUELVITEM m_DequeList;
+	HICON m_hTailIconCamera;
+	HICON m_hTailIconEmail;
+	HICON m_hTailIconMobile;
+	CEnBitmap m_bmpItemSelected;
+	CEnBitmap m_bmpFaceBG;
+	int nHoverItem;
+	int nLastHoverItem;
+
+public:
+	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
+	afx_msg void OnPaint();
+	afx_msg void OnTimer(UINT_PTR nIDEvent);
+};
+
+#endif 

+ 58 - 57
CTSManager/CTSManager/Navbar.cpp

@@ -75,12 +75,6 @@ int CNavbar::OnCreate(LPCREATESTRUCT lpCreateStruct)
 	// 创建视图: 
 	const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
 
-	if (!m_wndClassView.Create(dwViewStyle, rectDummy, this, 2))
-	{
-		TRACE0("未能创建类视图\n");
-		return -1;      // 未能创建
-	}
-
 	// 加载图像: 
 	m_wndToolBar.Create(this, AFX_DEFAULT_TOOLBAR_STYLE, IDR_SORT);
 	m_wndToolBar.LoadToolBar(IDR_SORT, 0, 0, TRUE /* 已锁定*/);
@@ -100,7 +94,7 @@ int CNavbar::OnCreate(LPCREATESTRUCT lpCreateStruct)
 
 	m_wndToolBar.ReplaceButton(ID_SORT_MENU, CNvaBarMenuButton(menuSort.GetSubMenu(0)->GetSafeHmenu()));
 
-	CNvaBarMenuButton* pButton =  DYNAMIC_DOWNCAST(CNvaBarMenuButton, m_wndToolBar.GetButton(0));
+	CNvaBarMenuButton* pButton = DYNAMIC_DOWNCAST(CNvaBarMenuButton, m_wndToolBar.GetButton(0));
 
 	if (pButton != nullptr)
 	{
@@ -110,8 +104,51 @@ int CNavbar::OnCreate(LPCREATESTRUCT lpCreateStruct)
 		pButton->SetMessageWnd(this);
 	}
 
-	// 填入一些静态树视图数据(此处只需填入虚拟代码,而不是复杂的数据)
-	FillClassView();
+#if 1
+	TCHAR szPath[MAX_PATH] = {0};
+	m_DrawerCtrl.Create(WS_VISIBLE | WS_CHILD, CRect(0, 23, 350, 500), this, 10000);
+	_stprintf_s(szPath, _T("%sSkin\\DefaultTheme\\Bar.bmp"), Global::g_szCurModuleDir);
+	m_DrawerCtrl.SetFolderImage(szPath);
+	_stprintf_s(szPath, _T("%sSkin\\DefaultTheme\\icon\\Find.ico"), Global::g_szCurModuleDir);
+	m_DrawerCtrl.SetSelIcon(szPath);
+
+	m_listImage.Create(40, 40, ILC_MASK | ILC_COLOR32, 1, 1);
+	CBitmap* pBitmap = new CBitmap;
+	CString strHead;
+	for (int i = 1;i <= 134;i++)
+	{
+		strHead.Format("%sSkin\\NEWFACE\\%d.bmp", Global::g_szCurModuleDir, i);
+		pBitmap->m_hObject = (HBITMAP)LoadImage(NULL, strHead, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
+		m_listImage.Add(pBitmap, RGB(255, 255, 255)/*mask color*/);
+	}
+	delete pBitmap;
+
+	//先创建ListCtrl (m_MyFriendListCtrl)
+	if (m_NavListCtrl.Create(LVS_REPORT | LVS_NOCOLUMNHEADER | LVS_OWNERDRAWFIXED | LVS_SHOWSELALWAYS | WS_CHILD,
+		CRect(0, 0, 0, 0), &m_DrawerCtrl, 10001))
+	{
+
+		m_NavListCtrl.SetExtendedStyle(m_NavListCtrl.GetExtendedStyle() | LVS_EX_FULLROWSELECT);
+		m_NavListCtrl.SetImageList(&m_listImage, LVSIL_SMALL);
+		m_NavListCtrl.InsertColumn(0, "名字", LVCFMT_LEFT);
+		//m_MyFriendListCtrl.SetColumnWidth(0 ,100);
+		//往ListCtrl 中添加好友
+		for (int i = 0; i < 150; i++)
+		{
+			CString strTemp = _T("");
+			LUSERITEM userInfo = { 0 };
+			strTemp.Format("季度:%d", i);
+			userInfo.szUserID = strTemp.GetBuffer(strTemp.GetLength());
+			strTemp.ReleaseBuffer();
+			userInfo.szNoticeMsg = _T("RTK2851!");
+			m_NavListCtrl.InsertItem(i, strTemp, i, &userInfo);//第三个参数 Index of the ImageList
+			m_NavListCtrl.SetItemData(i, (i % 2) ? i | CNavListCtrl::TVS_EMAIL : i);
+		}
+	}
+
+	m_DrawerCtrl.AddFolderBar("季度", &m_NavListCtrl, 0);
+	m_DrawerCtrl.SetSelFolder(0);
+#endif
 
 	return 0;
 }
@@ -122,44 +159,6 @@ void CNavbar::OnSize(UINT nType, int cx, int cy)
 	AdjustLayout();
 }
 
-void CNavbar::FillClassView()
-{
-	HTREEITEM hRoot = m_wndClassView.InsertItem(_T("FakeApp 类"), 0, 0);
-	m_wndClassView.SetItemState(hRoot, TVIS_BOLD, TVIS_BOLD);
-
-	HTREEITEM hClass = m_wndClassView.InsertItem(_T("CFakeAboutDlg"), 1, 1, hRoot);
-	m_wndClassView.InsertItem(_T("CFakeAboutDlg()"), 3, 3, hClass);
-
-	m_wndClassView.Expand(hRoot, TVE_EXPAND);
-
-	hClass = m_wndClassView.InsertItem(_T("CFakeApp"), 1, 1, hRoot);
-	m_wndClassView.InsertItem(_T("CFakeApp()"), 3, 3, hClass);
-	m_wndClassView.InsertItem(_T("InitInstance()"), 3, 3, hClass);
-	m_wndClassView.InsertItem(_T("OnAppAbout()"), 3, 3, hClass);
-
-	hClass = m_wndClassView.InsertItem(_T("CFakeAppDoc"), 1, 1, hRoot);
-	m_wndClassView.InsertItem(_T("CFakeAppDoc()"), 4, 4, hClass);
-	m_wndClassView.InsertItem(_T("~CFakeAppDoc()"), 3, 3, hClass);
-	m_wndClassView.InsertItem(_T("OnNewDocument()"), 3, 3, hClass);
-
-	hClass = m_wndClassView.InsertItem(_T("CFakeAppView"), 1, 1, hRoot);
-	m_wndClassView.InsertItem(_T("CFakeAppView()"), 4, 4, hClass);
-	m_wndClassView.InsertItem(_T("~CFakeAppView()"), 3, 3, hClass);
-	m_wndClassView.InsertItem(_T("GetDocument()"), 3, 3, hClass);
-	m_wndClassView.Expand(hClass, TVE_EXPAND);
-
-	hClass = m_wndClassView.InsertItem(_T("CFakeAppFrame"), 1, 1, hRoot);
-	m_wndClassView.InsertItem(_T("CFakeAppFrame()"), 3, 3, hClass);
-	m_wndClassView.InsertItem(_T("~CFakeAppFrame()"), 3, 3, hClass);
-	m_wndClassView.InsertItem(_T("m_wndMenuBar"), 6, 6, hClass);
-	m_wndClassView.InsertItem(_T("m_wndToolBar"), 6, 6, hClass);
-	m_wndClassView.InsertItem(_T("m_wndStatusBar"), 6, 6, hClass);
-
-	hClass = m_wndClassView.InsertItem(_T("Globals"), 2, 2, hRoot);
-	m_wndClassView.InsertItem(_T("theFakeApp"), 5, 5, hClass);
-	m_wndClassView.Expand(hClass, TVE_EXPAND);
-}
-
 void CNavbar::OnContextMenu(CWnd* pWnd, CPoint point)
 {
 	CTreeCtrl* pWndTree = (CTreeCtrl*)&m_wndClassView;
@@ -216,7 +215,6 @@ void CNavbar::AdjustLayout()
 	int cyTlb = m_wndToolBar.CalcFixedLayout(FALSE, TRUE).cy;
 
 	m_wndToolBar.SetWindowPos(nullptr, rectClient.left, rectClient.top, rectClient.Width(), cyTlb, SWP_NOACTIVATE | SWP_NOZORDER);
-	m_wndClassView.SetWindowPos(nullptr, rectClient.left + 1, rectClient.top + cyTlb + 1, rectClient.Width() - 2, rectClient.Height() - cyTlb - 2, SWP_NOACTIVATE | SWP_NOZORDER);
 }
 
 BOOL CNavbar::PreTranslateMessage(MSG* pMsg)
@@ -233,7 +231,7 @@ void CNavbar::OnSort(UINT id)
 
 	m_nCurrSort = id;
 
-	CNvaBarMenuButton* pButton =  DYNAMIC_DOWNCAST(CNvaBarMenuButton, m_wndToolBar.GetButton(0));
+	CNvaBarMenuButton* pButton = DYNAMIC_DOWNCAST(CNvaBarMenuButton, m_wndToolBar.GetButton(0));
 
 	if (pButton != nullptr)
 	{
@@ -276,26 +274,33 @@ void CNavbar::OnNewFolder()
 void CNavbar::OnPaint()
 {
 	CPaintDC dc(this); // 用于绘制的设备上下文
-
+#if 0
 	CRect rectTree;
 	m_wndClassView.GetWindowRect(rectTree);
 	ScreenToClient(rectTree);
 
 	rectTree.InflateRect(1, 1);
 	dc.Draw3dRect(rectTree, ::GetSysColor(COLOR_3DSHADOW), ::GetSysColor(COLOR_3DSHADOW));
+#else
+	// 如果CDockablePane无控件,改变大小时背景会刷新失败;
+	// 所以要重载onpaint;
+	CRect rc;
+	GetClientRect(rc);
+	CBrush   brush;
+	brush.CreateSolidBrush(CMFCVisualManager::GetInstance()->GetToolbarHighlightColor());
+	dc.FillRect(&rc, &brush);
+#endif
 }
 
 void CNavbar::OnSetFocus(CWnd* pOldWnd)
 {
 	CDockablePane::OnSetFocus(pOldWnd);
 
-	m_wndClassView.SetFocus();
+	//m_wndClassView.SetFocus();
 }
 
 void CNavbar::OnChangeVisualStyle()
 {
-	m_ClassViewImages.DeleteImageList();
-
 	UINT uiBmpId = theApp.m_bHiColorIcons ? IDB_CLASS_VIEW_24 : IDB_CLASS_VIEW;
 
 	CBitmap bmp;
@@ -313,10 +318,6 @@ void CNavbar::OnChangeVisualStyle()
 
 	nFlags |= (theApp.m_bHiColorIcons) ? ILC_COLOR24 : ILC_COLOR4;
 
-	m_ClassViewImages.Create(16, bmpObj.bmHeight, nFlags, 0, 0);
-	m_ClassViewImages.Add(&bmp, RGB(255, 0, 0));
-
-	m_wndClassView.SetImageList(&m_ClassViewImages, TVSIL_NORMAL);
 
 	m_wndToolBar.CleanUpLockedImages();
 	m_wndToolBar.LoadBitmap(theApp.m_bHiColorIcons ? IDB_SORT_24 : IDR_SORT, 0, 0, TRUE /* 锁定*/);

+ 10 - 4
CTSManager/CTSManager/Navbar.h

@@ -2,12 +2,14 @@
 #pragma once
 
 #include "ViewTree.h"
+#include "DrawerCtrl.h"
+#include "NavListCtrl.h"
 
 class CNavToolBar : public CMFCToolBar
 {
 	virtual void OnUpdateCmdUI(CFrameWnd* /*pTarget*/, BOOL bDisableIfNoHndler)
 	{
-		CMFCToolBar::OnUpdateCmdUI((CFrameWnd*) GetOwner(), bDisableIfNoHndler);
+		CMFCToolBar::OnUpdateCmdUI((CFrameWnd*)GetOwner(), bDisableIfNoHndler);
 	}
 
 	virtual BOOL AllowShowOnList() const { return FALSE; }
@@ -28,13 +30,17 @@ protected:
 	CImageList m_ClassViewImages;
 	UINT m_nCurrSort;
 
+#if 1
+	CImageList		m_listImage;
+	CDrawerCtrl		m_DrawerCtrl;
+	CNavListCtrl    m_NavListCtrl;
+#endif
 	void FillClassView();
 
-// 重写
+	// 重写
 public:
 	virtual BOOL PreTranslateMessage(MSG* pMsg);
-	//virtual BOOL CanBeResized() const { return FALSE; }; // 不允许改变大小
-	//virtual BOOL IsResizable() const { return FALSE; } // 会报错;
+
 protected:
 	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
 	afx_msg void OnSize(UINT nType, int cx, int cy);

二進制
CTSManager/CTSManager/Skin/DefaultTheme/Bar.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/EditBox.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/FaceBG.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/IconButton.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/ItemSelected.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/MainFigure.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/MainMenu.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/MainPanle.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/TabBG.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/close.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/figure.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/BlankPanel.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/CameraProp.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/Chat.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/ContentsButton.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/Down.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/EmailProp.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/Find.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/FriendButton.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/Game.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/MobileButton.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/MobileProp.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/NetClub.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/NetDiskButton.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/Normal.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/PaiPaiFriendButton.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/QZONE_Bar.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/app.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/brw.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/brw1.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/closeleft.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/color.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/list.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/live.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/mail.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/msg.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/music.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/papa.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/pet.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/search.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/sell.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/sms.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/tool.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/icon/wealth.ico


二進制
CTSManager/CTSManager/Skin/DefaultTheme/imonline.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/leftBar.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/max.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/min.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/restore.bmp


二進制
CTSManager/CTSManager/Skin/DefaultTheme/updown.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/1.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/10.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/100.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/101.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/102.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/103.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/104.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/105.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/106.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/107.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/108.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/109.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/11.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/110.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/111.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/112.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/113.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/114.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/115.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/116.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/117.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/118.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/119.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/12.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/120.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/121.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/122.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/123.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/124.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/125.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/126.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/127.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/128.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/129.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/13.bmp


二進制
CTSManager/CTSManager/Skin/NEWFACE/130.bmp


Some files were not shown because too many files changed in this diff