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

对话框与窗口

开发平台:

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 "SearchOptions.h"
  22. #include "MainFrm.h"
  23. #include "SearchOptionsPane.h"
  24. #include "SearchOptionsView.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 // VC5
  31. #define AFX_ID_VIEW_MINIMUM              ID_VIEW_SMALLICON
  32. #define AFX_ID_VIEW_MAXIMUM              ID_VIEW_BYNAME
  33. #endif
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CMainFrame
  36. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  37. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  38. //{{AFX_MSG_MAP(CMainFrame)
  39. ON_WM_CREATE()
  40. ON_COMMAND(ID_VIEW_THEME_OFFICEXP, OnViewThemeOfficeXP)
  41. ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_OFFICEXP, OnUpdateViewThemeOfficeXP)
  42. ON_COMMAND(ID_TOGGLE_SEARCH, OnToggleSearch)
  43. ON_UPDATE_COMMAND_UI(ID_TOGGLE_SEARCH, OnUpdateToggleSearch)
  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. // TODO: add member initialization code here
  62. m_pSearchOptionsPane = NULL;
  63. m_pSearchOptionsView = NULL;
  64. m_bSearchHidden = false;
  65. // initialize themes.
  66. m_iTheme = m_regMgr.GetProfileInt(
  67. _T("Settings"), _T("Theme"), xtThemeOfficeXP);
  68. }
  69. CMainFrame::~CMainFrame()
  70. {
  71. m_regMgr.WriteProfileInt(
  72. _T("Settings"), _T("Theme"), m_iTheme);
  73. }
  74. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  75. {
  76. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  77. return -1;
  78. if (!m_wndStatusBar.Create(this) ||
  79. !m_wndStatusBar.SetIndicators(indicators,
  80. sizeof(indicators)/sizeof(UINT)))
  81. {
  82. TRACE0("Failed to create status barn");
  83. return -1;      // fail to create
  84. }
  85. if (!InitCommandBars())
  86. return -1;
  87. XTPPaintManager()->SetTheme((XTPPaintTheme)m_iTheme);
  88. CXTPCommandBars* pCommandBars = GetCommandBars();
  89. pCommandBars->SetMenu(_T("Menu Bar"), IDR_MAINFRAME);
  90. CXTPToolBar* pCommandBar = (CXTPToolBar*)pCommandBars->Add(_T("Standard"), xtpBarTop);
  91. if (!pCommandBar ||
  92. !pCommandBar->LoadToolBar(IDR_MAINFRAME))
  93. {
  94. TRACE0("Failed to create toolbarn");
  95. return -1;
  96. }
  97. // Load the previous state for command bars.
  98. LoadCommandBars(_T("CommandBars"));
  99. SetTheme(m_iTheme);
  100. return 0;
  101. }
  102. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
  103. CCreateContext* pContext)
  104. {
  105. // create splitter window
  106. if (!m_wndSplitter.CreateStatic(this, 1, 2))
  107. return FALSE;
  108. if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CSearchOptionsPane), CSize(270, 100), pContext) ||
  109. !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CSearchOptionsView), CSize(100, 100), pContext))
  110. {
  111. m_wndSplitter.DestroyWindow();
  112. return FALSE;
  113. }
  114. m_wndSplitter.ShowTopBorder(false, 3);
  115. m_wndSplitter.SetSplitterStyle(XT_SPLIT_NOSIZE);
  116. m_pSearchOptionsPane = (CSearchOptionsPane*)m_wndSplitter.GetPane(0,0);
  117. ASSERT_VALID(m_pSearchOptionsPane);
  118. m_pSearchOptionsView = (CSearchOptionsView*)m_wndSplitter.GetPane(0,1);
  119. ASSERT_VALID(m_pSearchOptionsView);
  120. return TRUE;
  121. }
  122. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  123. {
  124. if( !CFrameWnd::PreCreateWindow(cs) )
  125. return FALSE;
  126. cs.lpszClass = _T("XTPMainFrame");
  127. CXTPDrawHelpers::RegisterWndClass(AfxGetInstanceHandle(), cs.lpszClass, 
  128. CS_DBLCLKS, AfxGetApp()->LoadIcon(IDR_MAINFRAME));
  129. cs.style &= ~FWS_ADDTOTITLE;
  130. return TRUE;
  131. }
  132. /////////////////////////////////////////////////////////////////////////////
  133. // CMainFrame diagnostics
  134. #ifdef _DEBUG
  135. void CMainFrame::AssertValid() const
  136. {
  137. CFrameWnd::AssertValid();
  138. }
  139. void CMainFrame::Dump(CDumpContext& dc) const
  140. {
  141. CFrameWnd::Dump(dc);
  142. }
  143. #endif //_DEBUG
  144. /////////////////////////////////////////////////////////////////////////////
  145. // CMainFrame message handlers
  146. CSearchOptionsView* CMainFrame::GetRightPane()
  147. {
  148. return m_pSearchOptionsView;
  149. }
  150. void CMainFrame::OnUpdateViewStyles(CCmdUI* pCmdUI)
  151. {
  152. // TODO: customize or extend this code to handle choices on the
  153. // View menu.
  154. CSearchOptionsView* pView = GetRightPane();
  155. // if the right-hand pane hasn't been created or isn't a view,
  156. // disable commands in our range
  157. if (pView == NULL)
  158. pCmdUI->Enable(FALSE);
  159. else
  160. {
  161. DWORD dwStyle = pView->GetStyle() & LVS_TYPEMASK;
  162. // if the command is ID_VIEW_LINEUP, only enable command
  163. // when we're in LVS_ICON or LVS_SMALLICON mode
  164. if (pCmdUI->m_nID == ID_VIEW_LINEUP)
  165. {
  166. if (dwStyle == LVS_ICON || dwStyle == LVS_SMALLICON)
  167. pCmdUI->Enable();
  168. else
  169. pCmdUI->Enable(FALSE);
  170. }
  171. else
  172. {
  173. // otherwise, use dots to reflect the style of the view
  174. pCmdUI->Enable();
  175. BOOL bChecked = FALSE;
  176. switch (pCmdUI->m_nID)
  177. {
  178. case ID_VIEW_DETAILS:
  179. bChecked = (dwStyle == LVS_REPORT);
  180. break;
  181. case ID_VIEW_SMALLICON:
  182. bChecked = (dwStyle == LVS_SMALLICON);
  183. break;
  184. case ID_VIEW_LARGEICON:
  185. bChecked = (dwStyle == LVS_ICON);
  186. break;
  187. case ID_VIEW_LIST:
  188. bChecked = (dwStyle == LVS_LIST);
  189. break;
  190. default:
  191. bChecked = FALSE;
  192. break;
  193. }
  194. pCmdUI->SetRadio(bChecked ? 1 : 0);
  195. }
  196. }
  197. }
  198. void CMainFrame::OnViewStyle(UINT nCommandID)
  199. {
  200. // TODO: customize or extend this code to handle choices on the
  201. // View menu.
  202. CSearchOptionsView* pView = GetRightPane();
  203. // if the right-hand pane has been created and is a CSearchOptionsView,
  204. // process the menu commands...
  205. if (pView != NULL)
  206. {
  207. DWORD dwStyle = (DWORD)-1;
  208. switch (nCommandID)
  209. {
  210. case ID_VIEW_LINEUP:
  211. {
  212. // ask the list control to snap to grid
  213. CListCtrl& refListCtrl = pView->GetListCtrl();
  214. refListCtrl.Arrange(LVA_SNAPTOGRID);
  215. }
  216. break;
  217. // other commands change the style on the list control
  218. case ID_VIEW_DETAILS:
  219. dwStyle = LVS_REPORT;
  220. break;
  221. case ID_VIEW_SMALLICON:
  222. dwStyle = LVS_SMALLICON;
  223. break;
  224. case ID_VIEW_LARGEICON:
  225. dwStyle = LVS_ICON;
  226. break;
  227. case ID_VIEW_LIST:
  228. dwStyle = LVS_LIST;
  229. break;
  230. }
  231. // change the style; window will repaint automatically
  232. if (dwStyle != -1)
  233. pView->ModifyStyle(LVS_TYPEMASK, dwStyle);
  234. }
  235. }
  236. void CMainFrame::ToggleSearchPane()
  237. {
  238. if (m_bSearchHidden) {
  239. GetSplitterWnd().ShowColumn();
  240. }
  241. else {
  242. GetSplitterWnd().HideColumn(0);
  243. }
  244. m_bSearchHidden = !m_bSearchHidden;
  245. }
  246. void CMainFrame::OnToggleSearch()
  247. {
  248. ToggleSearchPane();
  249. }
  250. void CMainFrame::OnUpdateToggleSearch(CCmdUI* pCmdUI)
  251. {
  252. pCmdUI->SetCheck(!m_bSearchHidden);
  253. }
  254. void CMainFrame::SetTheme(int iTheme)
  255. {
  256. m_iTheme = iTheme;
  257. XTThemeManager()->SetTheme((XTThemeStyle)m_iTheme);
  258. XTPPaintManager()->SetTheme((XTPPaintTheme)m_iTheme);
  259. RedrawWindow( NULL, NULL,
  260. RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN );
  261. RecalcLayout();
  262. }
  263. void CMainFrame::OnViewThemeOfficeXP()
  264. {
  265. SetTheme((m_iTheme == xtThemeOfficeXP)? xtThemeDefault: xtThemeOfficeXP);
  266. }
  267. void CMainFrame::OnUpdateViewThemeOfficeXP(CCmdUI* pCmdUI)
  268. {
  269. pCmdUI->SetCheck(m_iTheme == xtThemeOfficeXP);
  270. }
  271. void CMainFrame::OnClose()
  272. {
  273. // Save the current state for command bars.
  274. SaveCommandBars(_T("CommandBars"));
  275. CFrameWnd::OnClose();
  276. }
  277. void CMainFrame::OnCustomize()
  278. {
  279. // get a pointer to the command bars object.
  280. CXTPCommandBars* pCommandBars = GetCommandBars();
  281. if (pCommandBars == NULL)
  282. return;
  283. // instanciate the customize dialog
  284. CXTPCustomizeSheet dlg(pCommandBars);
  285. // add the options page to the customize dialog.
  286. CXTPCustomizeOptionsPage pageOptions(&dlg);
  287. dlg.AddPage(&pageOptions);
  288. // add the commands page to the customize dialog.
  289. CXTPCustomizeCommandsPage* pPageCommands = dlg.GetCommandsPage();
  290. pPageCommands->AddCategories(IDR_MAINFRAME);
  291. // initialize the commands page page.
  292. pPageCommands->InsertAllCommandsCategory();
  293. pPageCommands->InsertBuiltInMenus(IDR_MAINFRAME);
  294. pPageCommands->InsertNewMenuCategory();
  295. // display the customize dialog.
  296. dlg.DoModal();
  297. }