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

对话框与窗口

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "Pager.h"
  22. #include "MainFrm.h"
  23. #include "MenuListBoxView.h"
  24. #include "PagerView.h"
  25. #ifdef _DEBUG
  26. #define new DEBUG_NEW
  27. #undef THIS_FILE
  28. static char THIS_FILE[] = __FILE__;
  29. #endif
  30. #ifndef AFX_ID_VIEW_MINIMUM
  31. #define AFX_ID_VIEW_MINIMUM              ID_VIEW_SMALLICON
  32. #endif
  33. #ifndef AFX_ID_VIEW_MAXIMUM
  34. #define AFX_ID_VIEW_MAXIMUM              ID_VIEW_BYNAME
  35. #endif
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CMainFrame
  38. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  39. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  40. //{{AFX_MSG_MAP(CMainFrame)
  41. ON_WM_CREATE()
  42. ON_COMMAND(ID_VIEW_SWITCH_THEME, OnViewSwitchTheme)
  43. ON_UPDATE_COMMAND_UI(ID_VIEW_SWITCH_THEME, OnUpdateViewSwitchTheme)
  44. //}}AFX_MSG_MAP
  45. ON_WM_CLOSE()
  46. ON_COMMAND(XTP_ID_CUSTOMIZE, OnCustomize)
  47. ON_UPDATE_COMMAND_UI_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnUpdateViewStyles)
  48. ON_COMMAND_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnViewStyle)
  49. END_MESSAGE_MAP()
  50. static UINT indicators[] =
  51. {
  52. ID_SEPARATOR,           // status line indicator
  53. ID_INDICATOR_CAPS,
  54. ID_INDICATOR_NUM,
  55. ID_INDICATOR_SCRL,
  56. };
  57. /////////////////////////////////////////////////////////////////////////////
  58. // CMainFrame construction/destruction
  59. CMainFrame::CMainFrame()
  60. {
  61. // initialize themes.
  62. m_iTheme = m_regMgr.GetProfileInt(
  63. _T("Settings"), _T("Theme"), xtThemeOfficeXP);
  64. }
  65. CMainFrame::~CMainFrame()
  66. {
  67. m_regMgr.WriteProfileInt(
  68. _T("Settings"), _T("Theme"), m_iTheme);
  69. }
  70. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  71. {
  72. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  73. return -1;
  74. if (!m_wndStatusBar.Create(this) ||
  75. !m_wndStatusBar.SetIndicators(indicators,
  76. sizeof(indicators)/sizeof(UINT)))
  77. {
  78. TRACE0("Failed to create status barn");
  79. return -1;      // fail to create
  80. }
  81. if (!InitCommandBars())
  82. return -1;
  83. CXTPCommandBars* pCommandBars = GetCommandBars();
  84. pCommandBars->SetMenu(_T("Menu Bar"), IDR_MAINFRAME);
  85. CXTPToolBar* pCommandBar = (CXTPToolBar*)pCommandBars->Add(_T("Standard"), xtpBarTop);
  86. if (!pCommandBar ||
  87. !pCommandBar->LoadToolBar(IDR_MAINFRAME))
  88. {
  89. TRACE0("Failed to create toolbarn");
  90. return -1;
  91. }
  92. // Load the previous state for command bars.
  93. LoadCommandBars(_T("CommandBars"));
  94. SetTheme(m_iTheme);
  95. return 0;
  96. }
  97. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
  98. {
  99. // create splitter window
  100. if (!m_wndSplitter.CreateStatic(this, 1, 2))
  101. return FALSE;
  102. if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CMenuListBoxView), CSize(100, 100), pContext) ||
  103. !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CPagerView), CSize(100, 100), pContext))
  104. {
  105. m_wndSplitter.DestroyWindow();
  106. return FALSE;
  107. }
  108. return TRUE;
  109. }
  110. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  111. {
  112. if( !CFrameWnd::PreCreateWindow(cs) )
  113. return FALSE;
  114. cs.lpszClass = _T("XTPMainFrame");
  115. CXTPDrawHelpers::RegisterWndClass(AfxGetInstanceHandle(), cs.lpszClass, 
  116. CS_DBLCLKS, AfxGetApp()->LoadIcon(IDR_MAINFRAME));
  117. return TRUE;
  118. }
  119. /////////////////////////////////////////////////////////////////////////////
  120. // CMainFrame diagnostics
  121. #ifdef _DEBUG
  122. void CMainFrame::AssertValid() const
  123. {
  124. CFrameWnd::AssertValid();
  125. }
  126. void CMainFrame::Dump(CDumpContext& dc) const
  127. {
  128. CFrameWnd::Dump(dc);
  129. }
  130. #endif //_DEBUG
  131. /////////////////////////////////////////////////////////////////////////////
  132. // CMainFrame message handlers
  133. CPagerView* CMainFrame::GetRightPane()
  134. {
  135. CWnd* pWnd = m_wndSplitter.GetPane(0, 1);
  136. CPagerView* pView = DYNAMIC_DOWNCAST(CPagerView, pWnd);
  137. return pView;
  138. }
  139. void CMainFrame::OnUpdateViewStyles(CCmdUI* pCmdUI)
  140. {
  141. // TODO: customize or extend this code to handle choices on the
  142. // View menu.
  143. CPagerView* pView = GetRightPane();
  144. // if the right-hand pane hasn't been created or isn't a view,
  145. // disable commands in our range
  146. if (pView == NULL)
  147. pCmdUI->Enable(FALSE);
  148. else
  149. {
  150. DWORD dwStyle = pView->GetStyle() & LVS_TYPEMASK;
  151. // if the command is ID_VIEW_LINEUP, only enable command
  152. // when we're in LVS_ICON or LVS_SMALLICON mode
  153. if (pCmdUI->m_nID == ID_VIEW_LINEUP)
  154. {
  155. if (dwStyle == LVS_ICON || dwStyle == LVS_SMALLICON)
  156. pCmdUI->Enable();
  157. else
  158. pCmdUI->Enable(FALSE);
  159. }
  160. else
  161. {
  162. // otherwise, use dots to reflect the style of the view
  163. pCmdUI->Enable();
  164. BOOL bChecked = FALSE;
  165. switch (pCmdUI->m_nID)
  166. {
  167. case ID_VIEW_DETAILS:
  168. bChecked = (dwStyle == LVS_REPORT);
  169. break;
  170. case ID_VIEW_SMALLICON:
  171. bChecked = (dwStyle == LVS_SMALLICON);
  172. break;
  173. case ID_VIEW_LARGEICON:
  174. bChecked = (dwStyle == LVS_ICON);
  175. break;
  176. case ID_VIEW_LIST:
  177. bChecked = (dwStyle == LVS_LIST);
  178. break;
  179. default:
  180. bChecked = FALSE;
  181. break;
  182. }
  183. pCmdUI->SetRadio(bChecked ? 1 : 0);
  184. }
  185. }
  186. }
  187. void CMainFrame::OnViewStyle(UINT nCommandID)
  188. {
  189. // TODO: customize or extend this code to handle choices on the
  190. // View menu.
  191. CPagerView* pView = GetRightPane();
  192. // if the right-hand pane has been created and is a CPagerView,
  193. // process the menu commands...
  194. if (pView != NULL)
  195. {
  196. DWORD dwStyle = (DWORD)-1;
  197. switch (nCommandID)
  198. {
  199. case ID_VIEW_LINEUP:
  200. {
  201. // ask the list control to snap to grid
  202. CListCtrl& refListCtrl = pView->GetListCtrl();
  203. refListCtrl.Arrange(LVA_SNAPTOGRID);
  204. }
  205. break;
  206. // other commands change the style on the list control
  207. case ID_VIEW_DETAILS:
  208. dwStyle = LVS_REPORT;
  209. break;
  210. case ID_VIEW_SMALLICON:
  211. dwStyle = LVS_SMALLICON;
  212. break;
  213. case ID_VIEW_LARGEICON:
  214. dwStyle = LVS_ICON;
  215. break;
  216. case ID_VIEW_LIST:
  217. dwStyle = LVS_LIST;
  218. break;
  219. }
  220. // change the style; window will repaint automatically
  221. if (dwStyle != -1)
  222. pView->ModifyStyle(LVS_TYPEMASK, dwStyle);
  223. }
  224. }
  225. void CMainFrame::SetTheme(int iTheme)
  226. {
  227. m_iTheme = iTheme;
  228. XTThemeManager()->SetTheme((XTThemeStyle)m_iTheme);
  229. XTPPaintManager()->SetTheme((XTPPaintTheme)m_iTheme);
  230. RedrawWindow( NULL, NULL,
  231. RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN );
  232. RecalcLayout();
  233. }
  234. void CMainFrame::OnViewSwitchTheme()
  235. {
  236. switch (m_iTheme)
  237. {
  238. case xtThemeDefault:    m_iTheme = xtThemeOfficeXP;   break;
  239. case xtThemeOfficeXP:   m_iTheme = xtThemeOffice2003; break;
  240. case xtThemeOffice2003: m_iTheme = xtThemeDefault;    break;
  241. }
  242. SetTheme(m_iTheme);
  243. }
  244. void CMainFrame::OnUpdateViewSwitchTheme(CCmdUI* pCmdUI)
  245. {
  246. pCmdUI->Enable();
  247. }
  248. void CMainFrame::OnClose()
  249. {
  250. // Save the current state for command bars.
  251. SaveCommandBars(_T("CommandBars"));
  252. CFrameWnd::OnClose();
  253. }
  254. void CMainFrame::OnCustomize()
  255. {
  256. // get a pointer to the command bars object.
  257. CXTPCommandBars* pCommandBars = GetCommandBars();
  258. if (pCommandBars == NULL)
  259. return;
  260. // instantiate the customize dialog
  261. CXTPCustomizeSheet dlg(pCommandBars);
  262. // add the options page to the customize dialog.
  263. CXTPCustomizeOptionsPage pageOptions(&dlg);
  264. dlg.AddPage(&pageOptions);
  265. // add the commands page to the customize dialog.
  266. CXTPCustomizeCommandsPage* pPageCommands = dlg.GetCommandsPage();
  267. pPageCommands->AddCategories(IDR_MAINFRAME);
  268. // initialize the commands page page.
  269. pPageCommands->InsertAllCommandsCategory();
  270. pPageCommands->InsertBuiltInMenus(IDR_MAINFRAME);
  271. pPageCommands->InsertNewMenuCategory();
  272. // display the customize dialog.
  273. dlg.DoModal();
  274. }