MainFrm.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:10k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "WinExplorer.h"
  5. #include "MainFrm.h"
  6. #include "ShellTreeView.h"
  7. #include "ShellListView.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. #ifndef AFX_ID_VIEW_MINIMUM
  14. #define AFX_ID_VIEW_MINIMUM              ID_VIEW_SMALLICON
  15. #endif
  16. #ifndef AFX_ID_VIEW_MAXIMUM
  17. #define AFX_ID_VIEW_MAXIMUM              ID_VIEW_BYNAME
  18. #endif
  19.  
  20. BOOL CAddressComboBox::PreTranslateMessage(MSG* pMsg)
  21. {
  22. if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
  23. {
  24. GetOwner()->SendMessage(WM_COMMAND, IDOK);
  25. }
  26. return CXTComboBoxEx::PreTranslateMessage(pMsg);
  27. }
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CMainFrame
  30. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  31. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  32. //{{AFX_MSG_MAP(CMainFrame)
  33. ON_WM_CREATE()
  34. ON_COMMAND(ID_VIEWS, OnViews)
  35. ON_COMMAND(ID_VIEW_FOLDERS, OnFolders)
  36. ON_UPDATE_COMMAND_UI(ID_VIEW_FOLDERS, OnUpdateFolders)
  37. ON_COMMAND(ID_VIEW_THEME_OFFICEXP, OnViewThemeOfficeXP)
  38. ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_OFFICEXP, OnUpdateViewThemeOfficeXP)
  39. //}}AFX_MSG_MAP
  40. ON_XTP_CREATECONTROL()
  41. ON_WM_CLOSE()
  42. ON_COMMAND(XTP_ID_CUSTOMIZE, OnCustomize)
  43. ON_COMMAND_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnViewStyle)
  44. ON_UPDATE_COMMAND_UI_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnUpdateViewStyles)
  45. ON_COMMAND(IDOK, OnAddressBarEnter)
  46. ON_CBN_SELENDOK(IDC_ADDRESSBAR, OnSelEndOkAddressBar)
  47. END_MESSAGE_MAP()
  48. static UINT indicators[] =
  49. {
  50. ID_SEPARATOR,           // status line indicator
  51. ID_INDICATOR_CAPS,
  52. ID_INDICATOR_NUM,
  53. ID_INDICATOR_SCRL,
  54. };
  55. /////////////////////////////////////////////////////////////////////////////
  56. // CMainFrame construction/destruction
  57. CMainFrame::CMainFrame()
  58. {
  59. // TODO: add member initialization code here
  60. m_pTreeView    = NULL;
  61. m_pListView    = NULL;
  62. // initialize themes.
  63. m_iTheme = m_regMgr.GetProfileInt(
  64. _T("Settings"), _T("Theme"), xtThemeOfficeXP);
  65. }
  66. CMainFrame::~CMainFrame()
  67. {
  68. m_regMgr.WriteProfileInt(
  69. _T("Settings"), _T("Theme"), m_iTheme);
  70. }
  71. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  72. {
  73. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  74. return -1;
  75. if (!m_wndStatusBar.Create(this) ||
  76. !m_wndStatusBar.SetIndicators(indicators,
  77.   sizeof(indicators)/sizeof(UINT)))
  78. {
  79. TRACE0("Failed to create status barn");
  80. return -1;      // fail to create
  81. }
  82. if (!InitCommandBars())
  83. return -1;
  84. CXTPCommandBars* pCommandBars = GetCommandBars();
  85. if(pCommandBars == NULL)
  86. {
  87. TRACE0("Failed to create command bars object.n");
  88. return -1;      // fail to create
  89. }
  90. pCommandBars->SetMenu(_T("Menu Bar"), IDR_MAINFRAME);
  91. CXTPToolBar* pCommandBar = (CXTPToolBar*)pCommandBars->Add(_T("Standard"), xtpBarTop);
  92. if (!pCommandBar ||
  93. !pCommandBar->LoadToolBar(IDR_MAINFRAME))
  94. {
  95. TRACE0("Failed to create toolbarn");
  96. return -1;
  97. }
  98. // Load the previous state for command bars.
  99. LoadCommandBars(_T("CommandBars"));
  100. SetTheme(m_iTheme);
  101. m_pTreeView = (CShellTreeView*)m_wndSplitter.GetPane(0,0);
  102. m_pListView = (CShellListView*)m_wndSplitter.GetPane(0,1);
  103. m_pTreeView->AssociateCombo(&m_wndAddressCombo);
  104. return 0;
  105. }
  106. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  107. {
  108. if( !CFrameWnd::PreCreateWindow(cs) )
  109. return FALSE;
  110. cs.lpszClass = _T("XTPMainFrame");
  111. CXTPDrawHelpers::RegisterWndClass(AfxGetInstanceHandle(), cs.lpszClass, 
  112. CS_DBLCLKS, AfxGetApp()->LoadIcon(IDR_MAINFRAME));
  113. cs.style &= ~FWS_ADDTOTITLE;
  114. return TRUE;
  115. }
  116. /////////////////////////////////////////////////////////////////////////////
  117. // CMainFrame diagnostics
  118. #ifdef _DEBUG
  119. void CMainFrame::AssertValid() const
  120. {
  121. CFrameWnd::AssertValid();
  122. }
  123. void CMainFrame::Dump(CDumpContext& dc) const
  124. {
  125. CFrameWnd::Dump(dc);
  126. }
  127. #endif //_DEBUG
  128. /////////////////////////////////////////////////////////////////////////////
  129. // CMainFrame message handlers
  130. void CMainFrame::OnUpdateViewStyles(CCmdUI* pCmdUI)
  131. {
  132. // TODO: customize or extend this code to handle choices on the
  133. // View menu.
  134. // if the right-hand pane hasn't been created or isn't a view,
  135. // disable commands in our range
  136. CListCtrl* pListCtrl = &m_pListView->GetListCtrl();
  137. if (pListCtrl == NULL)
  138. pCmdUI->Enable(FALSE);
  139. else
  140. {
  141. DWORD dwStyle = pListCtrl->GetStyle() & LVS_TYPEMASK;
  142. // if the command is ID_VIEW_LINEUP, only enable command
  143. // when we're in LVS_ICON or LVS_SMALLICON mode
  144. if (pCmdUI->m_nID == ID_VIEW_LINEUP)
  145. {
  146. if (dwStyle == LVS_ICON || dwStyle == LVS_SMALLICON)
  147. pCmdUI->Enable();
  148. else
  149. pCmdUI->Enable(FALSE);
  150. }
  151. else
  152. {
  153. // otherwise, use dots to reflect the style of the view
  154. pCmdUI->Enable();
  155. BOOL bChecked = FALSE;
  156. switch (pCmdUI->m_nID)
  157. {
  158. case ID_VIEW_DETAILS:
  159. bChecked = (dwStyle == LVS_REPORT);
  160. break;
  161. case ID_VIEW_SMALLICON:
  162. bChecked = (dwStyle == LVS_SMALLICON);
  163. break;
  164. case ID_VIEW_LARGEICON:
  165. bChecked = (dwStyle == LVS_ICON);
  166. break;
  167. case ID_VIEW_LIST:
  168. bChecked = (dwStyle == LVS_LIST);
  169. break;
  170. default:
  171. bChecked = FALSE;
  172. break;
  173. }
  174. pCmdUI->SetRadio(bChecked ? 1 : 0);
  175. }
  176. }
  177. }
  178. void CMainFrame::OnViewStyle(UINT nCommandID)
  179. {
  180. // TODO: customize or extend this code to handle choices on the
  181. // View menu.
  182. CListCtrl* pListCtrl = &m_pListView->GetListCtrl();
  183. // if the right-hand pane has been created and is a CGUI_ExplorerView,
  184. // process the menu commands...
  185. if (pListCtrl != NULL)
  186. {
  187. DWORD dwStyle = (DWORD)-1;
  188. switch (nCommandID)
  189. {
  190. case ID_VIEW_LINEUP:
  191. {
  192. // ask the list control to snap to grid
  193. pListCtrl->Arrange(LVA_SNAPTOGRID);
  194. }
  195. break;
  196. // other commands change the style on the list control
  197. case ID_VIEW_DETAILS:
  198. dwStyle = LVS_REPORT;
  199. break;
  200. case ID_VIEW_SMALLICON:
  201. dwStyle = LVS_SMALLICON;
  202. break;
  203. case ID_VIEW_LARGEICON:
  204. dwStyle = LVS_ICON;
  205. break;
  206. case ID_VIEW_LIST:
  207. dwStyle = LVS_LIST;
  208. break;
  209. }
  210. // change the style; window will repaint automatically
  211. if (dwStyle != (DWORD)-1)
  212. pListCtrl->ModifyStyle(LVS_TYPEMASK, dwStyle);
  213. }
  214. }
  215. void CMainFrame::OnViews() 
  216. {
  217. CListCtrl* pListCtrl = &m_pListView->GetListCtrl();
  218. DWORD dwStyle =pListCtrl->GetStyle();
  219. switch (dwStyle & (LVS_REPORT | LVS_SMALLICON | LVS_ICON | LVS_LIST))
  220. {
  221. case LVS_ICON:      OnViewStyle( ID_VIEW_SMALLICON ); break;
  222. case LVS_SMALLICON: OnViewStyle( ID_VIEW_LIST );      break;
  223. case LVS_LIST:      OnViewStyle( ID_VIEW_DETAILS );   break;
  224. case LVS_REPORT:    OnViewStyle( ID_VIEW_LARGEICON ); break;
  225. }
  226. }
  227. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext) 
  228. {
  229. // create splitter window
  230. if (!m_wndSplitter.CreateStatic(this, 1, 2))
  231. return FALSE;
  232. if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CShellTreeView),
  233. CSize(300, 100), pContext))
  234. {
  235. m_wndSplitter.DestroyWindow();
  236. return FALSE;
  237. }
  238. if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CShellListView),
  239. CSize(100, 100), pContext))
  240. {
  241. m_wndSplitter.DestroyWindow();
  242. return FALSE;
  243. }
  244. m_wndSplitter.ShowTopBorder(false, 3);
  245. m_wndSplitter.SetSplitterStyle(XT_SPLIT_DOTTRACKER|XT_SPLIT_NOBORDER);
  246. return TRUE;
  247. }
  248. void CMainFrame::OnAddressBarEnter()
  249. {
  250. CString strNewPath;
  251. m_wndAddressCombo.GetWindowText(strNewPath);
  252. if (strNewPath.GetLength())
  253. {
  254. m_pTreeView->TunnelTree(strNewPath);
  255. }
  256. }
  257. void CMainFrame::OnSelEndOkAddressBar()
  258. {
  259. if (m_pTreeView != NULL)
  260. {
  261. HTREEITEM hItem = (HTREEITEM)m_wndAddressCombo.GetItemData(
  262. m_wndAddressCombo.GetCurSel());
  263. if (hItem != NULL) {
  264. m_pTreeView->SelectItem(hItem);
  265. }
  266. }
  267. }
  268. void CMainFrame::OnFolders()
  269. {
  270. if (m_wndSplitter.GetColumnCount() == 1)
  271. {
  272. m_wndSplitter.ShowColumn();
  273. }
  274. else
  275. {
  276. m_wndSplitter.HideColumn(0);
  277. }
  278. }
  279. void CMainFrame::OnUpdateFolders(CCmdUI* pCmdUI)
  280. {
  281. pCmdUI->SetCheck(m_wndSplitter.GetPane(0,0)->IsKindOf(
  282. RUNTIME_CLASS(CShellTreeView)));
  283. }
  284. void CMainFrame::OnClose()
  285. {
  286. // Save the current state for command bars.
  287. SaveCommandBars(_T("CommandBars"));
  288. CMainFrameBase::OnClose();
  289. }
  290. void CMainFrame::OnCustomize()
  291. {
  292. // get a pointer to the command bars object.
  293. CXTPCommandBars* pCommandBars = GetCommandBars();
  294. if (pCommandBars == NULL)
  295. return;
  296. // instanciate the customize dialog
  297. CXTPCustomizeSheet dlg(pCommandBars);
  298. // add the options page to the customize dialog.
  299. CXTPCustomizeOptionsPage pageOptions(&dlg);
  300. dlg.AddPage(&pageOptions);
  301. // add the commands page to the customize dialog.
  302. CXTPCustomizeCommandsPage* pPageCommands = dlg.GetCommandsPage();
  303. pPageCommands->AddCategories(IDR_MAINFRAME);
  304. // initialize the commands page page.
  305. pPageCommands->InsertAllCommandsCategory();
  306. pPageCommands->InsertBuiltInMenus(IDR_MAINFRAME);
  307. pPageCommands->InsertNewMenuCategory();
  308. // display the customize dialog.
  309. dlg.DoModal();
  310. }
  311. int CMainFrame::OnCreateControl(LPCREATECONTROLSTRUCT lpCreateControl)
  312. {
  313. if (lpCreateControl->nID == IDC_ADDRESSBAR)
  314. {
  315. CRect rCombo(0,0,400,250);
  316. if (!m_wndAddressCombo.Create( WS_CHILD|WS_VISIBLE|CBS_DROPDOWN|WS_CLIPCHILDREN,
  317. rCombo, this, IDC_ADDRESSBAR ))
  318. {
  319. TRACE(_T("Failed to create combo-boxn"));
  320. return FALSE;      // fail to create
  321. }
  322. m_wndAddressCombo.SetOwner(this);
  323. CXTPControlCustom* pAddressCombo = CXTPControlCustom::CreateControlCustom(&m_wndAddressCombo);
  324. pAddressCombo->SetFlags(xtpFlagManualUpdate);
  325. lpCreateControl->pControl = pAddressCombo;
  326. return TRUE;
  327. }
  328. return FALSE;
  329. }
  330. void CMainFrame::SetTheme(int iTheme)
  331. {
  332. m_iTheme = iTheme;
  333. XTThemeManager()->SetTheme((XTThemeStyle)m_iTheme);
  334. XTPPaintManager()->SetTheme((XTPPaintTheme)m_iTheme);
  335. RedrawWindow( NULL, NULL,
  336. RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN );
  337. RecalcLayout();
  338. }
  339. void CMainFrame::OnViewThemeOfficeXP() 
  340. {
  341. SetTheme((m_iTheme == xtThemeOfficeXP)? xtThemeDefault: xtThemeOfficeXP);
  342. }
  343. void CMainFrame::OnUpdateViewThemeOfficeXP(CCmdUI* pCmdUI) 
  344. {
  345. pCmdUI->SetCheck(m_iTheme == xtThemeOfficeXP);
  346. }