DirView.cpp
上传用户:gzboli
上传日期:2013-04-10
资源大小:471k
文件大小:8k
源码类别:

图片显示

开发平台:

Visual C++

  1. // DirView.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "quickimage.h"
  5. #include "DirView.h"
  6. #include "DirFrm.h"
  7. #include "Global.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CDirView
  15. extern CString g_strCurrentDir;
  16. IMPLEMENT_DYNCREATE(CDirView, CFormView)
  17. CDirView::CDirView()
  18. : CFormView(CDirView::IDD)
  19. {
  20. //{{AFX_DATA_INIT(CDirView)
  21. //}}AFX_DATA_INIT
  22. }
  23. CDirView::~CDirView()
  24. {
  25. }
  26. void CDirView::DoDataExchange(CDataExchange* pDX)
  27. {
  28. CFormView::DoDataExchange(pDX);
  29. //{{AFX_DATA_MAP(CDirView)
  30. //}}AFX_DATA_MAP
  31. }
  32. BEGIN_MESSAGE_MAP(CDirView, CFormView)
  33. //{{AFX_MSG_MAP(CDirView)
  34. ON_NOTIFY(NM_RCLICK, IDC_TREE1, OnRclickTree1)
  35. ON_NOTIFY(TVN_ITEMEXPANDING, IDC_TREE1, OnItemexpandingTree1)
  36. ON_WM_SIZE()
  37. ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelchangedTree1)
  38. ON_COMMAND(ID_DIR_UP, OnDirUp)
  39. //}}AFX_MSG_MAP
  40. END_MESSAGE_MAP()
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CDirView diagnostics
  43. #ifdef _DEBUG
  44. void CDirView::AssertValid() const
  45. {
  46. CFormView::AssertValid();
  47. }
  48. void CDirView::Dump(CDumpContext& dc) const
  49. {
  50. CFormView::Dump(dc);
  51. }
  52. #endif //_DEBUG
  53. /////////////////////////////////////////////////////////////////////////////
  54. // CDirView message handlers
  55. void CDirView::OnInitialUpdate() 
  56. {
  57. CFormView::OnInitialUpdate();
  58. m_treeExplorer.SubclassDlgItem(IDC_TREE1, this);
  59. m_treeExplorer.PopulateTree();
  60. m_treeExplorer.EnableImages();
  61. // HTREEITEM hItem;
  62. // hItem = m_treeExplorer.GetNextItem(TVI_ROOT, TVGN_ROOT);
  63. // BuildPathFromTree(hItem);
  64. if(IsWindow(m_treeExplorer.GetSafeHwnd()))
  65. {
  66. CRect rc;
  67. GetClientRect(&rc);
  68. m_treeExplorer.MoveWindow(0, 0, rc.Width(), rc.Height());
  69. }
  70. }
  71. void CDirView::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult) 
  72. {
  73. m_treeExplorer.FolderPopup(pNMHDR, pResult);
  74. *pResult = 0;
  75. }
  76. void CDirView::OnItemexpandingTree1(NMHDR* pNMHDR, LRESULT* pResult) 
  77. {
  78. NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
  79. m_treeExplorer.FolderExpanding(pNMHDR, pResult);
  80. *pResult = 0;
  81. }
  82. void CDirView::OnSize(UINT nType, int cx, int cy) 
  83. {
  84. SetScrollSizes(MM_TEXT, CSize(cx, cy));
  85. CFormView::OnSize(nType, cx, cy);
  86. if(IsWindow(m_treeExplorer.GetSafeHwnd()))
  87. {
  88. m_treeExplorer.MoveWindow(0, 0, cx, cy);
  89. }
  90. }
  91. void CDirView::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) 
  92. {
  93. NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
  94. // TODO: Add your control notification handler code here
  95. CString strPath;
  96. if(m_treeExplorer.GetSelectedFolderPath(strPath))
  97. {
  98. CGlobal::ChangeDirectory(strPath);
  99. GetFileView()->ListFiles();
  100. }
  101. *pResult = 0;
  102. }
  103. CFileView* CDirView::GetFileView()
  104. {
  105. CWnd *pParent = GetParent();
  106. while(NULL != pParent)
  107. {
  108. if(pParent->IsKindOf(RUNTIME_CLASS(CDirFrame)))
  109. return (CFileView*)(((CDirFrame*)pParent)->m_wndSplitV.GetPane(0, 1));
  110. pParent = pParent->GetParent();
  111. }
  112. return NULL;
  113. }
  114. void CDirView::ExpendItem(LPCTSTR lpszItemText)
  115. {
  116. ASSERT(strlen(lpszItemText) > 0);
  117. HTREEITEM hSel = m_treeExplorer.GetSelectedItem();
  118. if(NULL == hSel)
  119. {
  120. return;
  121. }
  122. CString strItemText;
  123. m_treeExplorer.Expand(hSel, TVE_EXPAND);
  124. HTREEITEM hNext = m_treeExplorer.GetNextItem(hSel, TVGN_CHILD);
  125. if(NULL == hNext)
  126. {
  127. return;
  128. }
  129. while(NULL != hNext)
  130. {
  131. if(!GetItemFolderPath(strItemText, hNext))
  132. {
  133. return;
  134. }
  135. if(strItemText.CompareNoCase(lpszItemText) == 0)
  136. {
  137. break;
  138. }
  139. hNext = m_treeExplorer.GetNextItem(hNext, TVGN_NEXT);
  140. }
  141. if(NULL != hNext)
  142. {
  143. m_treeExplorer.SelectItem(hNext);
  144. // m_treeExplorer.Expand(hNext, TVE_EXPAND);
  145. }
  146. }
  147. void CDirView::SetItemText(LPCTSTR lpszOldText, LPCTSTR lpszNewText)
  148. {
  149. ASSERT(strlen(lpszOldText) > 0);
  150. ASSERT(strlen(lpszNewText) > 0);
  151. HTREEITEM hSel = m_treeExplorer.GetSelectedItem();
  152. if(NULL == hSel)
  153. {
  154. return;
  155. }
  156. CString strItemText;
  157. m_treeExplorer.Expand(hSel, TVE_EXPAND);
  158. HTREEITEM hNext = m_treeExplorer.GetNextItem(hSel, TVGN_CHILD);
  159. if(NULL == hNext)
  160. {
  161. return;
  162. }
  163. while(NULL != hNext)
  164. {
  165. if(!GetItemFolderPath(strItemText, hNext))
  166. {
  167. return;
  168. }
  169. if(strItemText.CompareNoCase(lpszOldText) == 0)
  170. {
  171. m_treeExplorer.SetItemText(hNext, lpszNewText);
  172. break;
  173. }
  174. hNext = m_treeExplorer.GetNextItem(hNext, TVGN_NEXT);
  175. }
  176. }
  177. void CDirView::DeleteChilds(LPCTSTR lpszItemText)
  178. {
  179. HTREEITEM hSel = m_treeExplorer.GetSelectedItem();
  180. if(NULL == hSel)
  181. {
  182. return;
  183. }
  184. if(NULL != lpszItemText)
  185. {
  186. CString strItemText;
  187. // m_treeExplorer.Expand(hSel, TVE_EXPAND);
  188. if(!GetItemFolderPath(strItemText, hSel))
  189. {
  190. return;
  191. }
  192. if(strItemText.CompareNoCase(lpszItemText) == 0)
  193. {
  194. goto Done;
  195. }
  196. hSel = m_treeExplorer.GetNextItem(hSel, TVGN_CHILD);
  197. if(NULL == hSel)
  198. {
  199. return;
  200. }
  201. while(NULL != hSel)
  202. {
  203. if(!GetItemFolderPath(strItemText, hSel))
  204. {
  205. return;
  206. }
  207. if(strItemText.CompareNoCase(lpszItemText) == 0)
  208. {
  209. break;
  210. }
  211. hSel = m_treeExplorer.GetNextItem(hSel, TVGN_NEXT);
  212. }
  213. }
  214. Done:
  215. if(NULL != hSel)
  216. {
  217. HTREEITEM hChild = m_treeExplorer.GetNextItem(hSel, TVGN_CHILD);
  218. while(NULL != hChild)
  219. {
  220. m_treeExplorer.DeleteItem(hChild);
  221. hChild = m_treeExplorer.GetNextItem(hSel, TVGN_CHILD);
  222. }
  223. }
  224. }
  225. void CDirView::DeleteItem(LPCTSTR lpszItemText)
  226. {
  227. ASSERT(strlen(lpszItemText) > 0);
  228. HTREEITEM hSel = m_treeExplorer.GetSelectedItem();
  229. if(NULL == hSel)
  230. {
  231. return;
  232. }
  233. CString strItemText;
  234. // m_treeExplorer.Expand(hSel, TVE_EXPAND);
  235. if(!GetItemFolderPath(strItemText, hSel))
  236. {
  237. return;
  238. }
  239. if(strItemText.CompareNoCase(lpszItemText) == 0)
  240. {
  241. m_treeExplorer.DeleteItem(hSel);
  242. }
  243. HTREEITEM hNext = m_treeExplorer.GetNextItem(hSel, TVGN_CHILD);
  244. if(NULL == hNext)
  245. {
  246. return;
  247. }
  248. while(NULL != hNext)
  249. {
  250. if(!GetItemFolderPath(strItemText, hNext))
  251. {
  252. return;
  253. }
  254. if(strItemText.CompareNoCase(lpszItemText) == 0)
  255. {
  256. m_treeExplorer.DeleteItem(hNext);
  257. return;
  258. }
  259. hNext = m_treeExplorer.GetNextItem(hNext, TVGN_NEXT);
  260. }
  261. }
  262. void CDirView::PoplateItem(LPCTSTR lpszItemText)
  263. {
  264. }
  265. BOOL CDirView::GetItemFolderPath(CString &strFolderPath, HTREEITEM hItem)
  266. {
  267. ASSERT(NULL != hItem);
  268. LPTVITEMDATA lptvid;  //Long pointer to TreeView item data
  269. LPSHELLFOLDER lpsf2=NULL;
  270. static char szBuff[MAX_PATH];
  271. HRESULT hr;
  272. BOOL bRet=false;
  273. lptvid=(LPTVITEMDATA)m_treeExplorer.GetItemData(hItem);
  274. if (lptvid && lptvid->lpsfParent && lptvid->lpi)
  275. {
  276. hr=lptvid->lpsfParent->BindToObject(lptvid->lpi,
  277. 0,IID_IShellFolder,(LPVOID *)&lpsf2);
  278. if (SUCCEEDED(hr))
  279. {
  280. ULONG ulAttrs = SFGAO_FILESYSTEM;
  281. // Determine what type of object we have.
  282. lptvid->lpsfParent->GetAttributesOf(1, (const struct _ITEMIDLIST **)&lptvid->lpi, &ulAttrs);
  283. if (ulAttrs & (SFGAO_FILESYSTEM))
  284. {
  285. if(SHGetPathFromIDList(lptvid->lpifq,szBuff)){
  286. strFolderPath = szBuff;
  287. bRet = true;
  288. }
  289. }
  290. }
  291. }
  292. if(lpsf2)
  293. lpsf2->Release();
  294. if(bRet)
  295. {
  296. if(strFolderPath.GetAt(strFolderPath.GetLength() -1) != '\')
  297. strFolderPath += _T("\");
  298. }
  299. return bRet;
  300. }
  301. void CDirView::OnDirUp() 
  302. {
  303. MoveToUpFolder();
  304. }
  305. void CDirView::MoveToUpFolder()
  306. {
  307. HTREEITEM hSel = m_treeExplorer.GetSelectedItem();
  308. if(NULL == hSel)
  309. {
  310. return;
  311. }
  312. HTREEITEM hParent = m_treeExplorer.GetNextItem(hSel, TVGN_PARENT);
  313. if(NULL != hParent)
  314. {
  315. m_treeExplorer.SelectItem(hParent);
  316. m_treeExplorer.Expand(hParent, TVE_EXPAND);
  317. }
  318. }