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

对话框与窗口

开发平台:

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 "CaptionBar.h"
  22. #include "MainFrm.h"
  23. #include "TreeViewEx.h"
  24. #include "ListViewEx.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              0xE810
  32. #define AFX_ID_VIEW_MAXIMUM              0xE815
  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_DEFAULT, OnViewThemeDefault)
  41. ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_DEFAULT, OnUpdateViewThemeDefault)
  42. ON_COMMAND(ID_VIEW_THEME_OFFICEXP, OnViewThemeOfficeXP)
  43. ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_OFFICEXP, OnUpdateViewThemeOfficeXP)
  44. ON_COMMAND(ID_VIEW_THEME_OFFICE2003, OnViewThemeOffice2003)
  45. ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_OFFICE2003, OnUpdateViewThemeOffice2003)
  46. //}}AFX_MSG_MAP
  47. ON_WM_CLOSE()
  48. ON_COMMAND(XTP_ID_CUSTOMIZE, OnCustomize)
  49. ON_UPDATE_COMMAND_UI_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnUpdateViewStyles)
  50. ON_COMMAND_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnViewStyle)
  51. ON_MESSAGE_VOID(CPWN_XT_PUSHPINBUTTON, OnPushPinButton)
  52. ON_MESSAGE_VOID(CPWN_XT_PUSHPINCANCEL, OnPushPinCancel)
  53. END_MESSAGE_MAP()
  54. static UINT indicators[] =
  55. {
  56. ID_SEPARATOR,           // status line indicator
  57. ID_INDICATOR_CAPS,
  58. ID_INDICATOR_NUM,
  59. ID_INDICATOR_SCRL,
  60. };
  61. /////////////////////////////////////////////////////////////////////////////
  62. // CMainFrame construction/destruction
  63. CMainFrame::CMainFrame()
  64. {
  65. // TODO: add member initialization code here
  66. m_nColumn      = 1;
  67. m_pwndTreeCtrl = NULL;
  68. m_pListView    = NULL;
  69. m_pTreeView    = NULL;
  70. // initialize themes.
  71. m_iTheme = m_regMgr.GetProfileInt(
  72. _T("Settings"), _T("Theme"), xtThemeOfficeXP);
  73. }
  74. CMainFrame::~CMainFrame()
  75. {
  76. m_regMgr.WriteProfileInt(
  77. _T("Settings"), _T("Theme"), m_iTheme);
  78. }
  79. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  80. {
  81. if (CMainFrameBase::OnCreate(lpCreateStruct) == -1)
  82. return -1;
  83. if (!m_wndStatusBar.Create(this) ||
  84. !m_wndStatusBar.SetIndicators(indicators,
  85.   sizeof(indicators)/sizeof(UINT)))
  86. {
  87. TRACE0("Failed to create status barn");
  88. return -1;      // fail to create
  89. }
  90. if (!InitCommandBars())
  91. return -1;
  92. CXTPCommandBars* pCommandBars = GetCommandBars();
  93. if(pCommandBars == NULL)
  94. {
  95. TRACE0("Failed to create command bars object.n");
  96. return -1;      // fail to create
  97. }
  98. pCommandBars->SetMenu(_T("Menu Bar"), IDR_MAINFRAME);
  99. CXTPToolBar* pCommandBar = (CXTPToolBar*)pCommandBars->Add(_T("Standard"), xtpBarTop);
  100. if (!pCommandBar ||
  101. !pCommandBar->LoadToolBar(IDR_MAINFRAME))
  102. {
  103. TRACE0("Failed to create toolbarn");
  104. return -1;
  105. }
  106. // Load the previous state for command bars.
  107. LoadCommandBars(_T("CommandBars"));
  108. SetTheme(m_iTheme);
  109. return 0;
  110. }
  111. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
  112. CCreateContext* pContext)
  113. {
  114. // Create the splitter window with two rows
  115. if (!m_wndSplitter.CreateStatic(this, 2, 1))
  116. {
  117. TRACE0("Failed to create splitter windown");
  118. return FALSE;
  119. }
  120. if (!m_wndCaption.Create(&m_wndSplitter, _T("Caption Text"), CPWS_EX_RAISED_EDGE,
  121. WS_VISIBLE|SS_CENTER|SS_CENTERIMAGE, CRect(0,0,0,0), m_wndSplitter.IdFromRowCol(0, 0)))
  122. {
  123. TRACE0("Failed to caption window.n");
  124. return -1;
  125. }
  126. HICON hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  127. m_wndCaption.SetCaptionColors(
  128. GetXtremeColor(COLOR_3DFACE),    // border color.
  129. GetXtremeColor(COLOR_3DSHADOW),  // background color.
  130. GetXtremeColor(COLOR_WINDOW) );  // font color.
  131. m_wndCaption.ModifyCaptionStyle(
  132. 4,       // border size in pixels.
  133. &XTAuxData().fontBold,   // caption font.
  134. NULL,    // caption text.
  135. hIcon);  // caption icon.
  136. // add the third splitter pane - which is a nested splitter with 2 rows
  137. if (!m_wndSplitter2.CreateStatic(&m_wndSplitter,    // our parent window is the first splitter
  138. 1, 2,                                           // the new splitter is 2 rows, 1 column
  139. WS_CHILD | WS_VISIBLE | WS_BORDER,              // style, WS_BORDER is needed
  140. m_wndSplitter.IdFromRowCol(1, 0)))              // new splitter is in the first row, 3rd column of first splitter
  141. {
  142. TRACE0("Failed to create nested splittern");
  143. return FALSE;
  144. }
  145. if (!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CTreeViewEx), CSize(200, 100), pContext) ||
  146. !m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(CListViewEx), CSize(100, 100), pContext))
  147. {
  148. m_wndSplitter2.DestroyWindow();
  149. return FALSE;
  150. }
  151. m_wndSplitter.SetRowInfo (0, 28, 0);
  152. m_pTreeView = (CTreeViewEx*)m_wndSplitter2.GetPane(0,0);
  153. m_pListView = (CListViewEx*)m_wndSplitter2.GetPane(0,1);
  154. // Initialize m_pwndTreeCtrl to point to the tree control in CTreeViewEx
  155. m_pwndTreeCtrl = &m_pTreeView->m_wndTreeCtrl;
  156. return TRUE;
  157. }
  158. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  159. {
  160. if( !CMainFrameBase::PreCreateWindow(cs) )
  161. return FALSE;
  162. cs.lpszClass = _T("XTPMainFrame");
  163. CXTPDrawHelpers::RegisterWndClass(AfxGetInstanceHandle(), cs.lpszClass, 
  164. CS_DBLCLKS, AfxGetApp()->LoadIcon(IDR_MAINFRAME));
  165. return TRUE;
  166. }
  167. /////////////////////////////////////////////////////////////////////////////
  168. // CMainFrame diagnostics
  169. #ifdef _DEBUG
  170. void CMainFrame::AssertValid() const
  171. {
  172. CMainFrameBase::AssertValid();
  173. }
  174. void CMainFrame::Dump(CDumpContext& dc) const
  175. {
  176. CMainFrameBase::Dump(dc);
  177. }
  178. #endif //_DEBUG
  179. /////////////////////////////////////////////////////////////////////////////
  180. // CMainFrame message handlers
  181. CListViewEx* CMainFrame::GetRightPane()
  182. {
  183. ASSERT_VALID(m_pListView); return m_pListView;
  184. }
  185. CTreeViewEx* CMainFrame::GetLeftPane()
  186. {
  187. ASSERT_VALID(m_pTreeView); return m_pTreeView;
  188. }
  189. void CMainFrame::OnUpdateViewStyles(CCmdUI* pCmdUI)
  190. {
  191. // TODO: customize or extend this code to handle choices on the
  192. // View menu.
  193. CListViewEx* pView = GetRightPane();
  194. // if the right-hand pane hasn't been created or isn't a view,
  195. // disable commands in our range
  196. if (pView == NULL)
  197. pCmdUI->Enable(FALSE);
  198. else
  199. {
  200. DWORD dwStyle = pView->GetStyle() & LVS_TYPEMASK;
  201. // if the command is ID_VIEW_LINEUP, only enable command
  202. // when we're in LVS_ICON or LVS_SMALLICON mode
  203. if (pCmdUI->m_nID == ID_VIEW_LINEUP)
  204. {
  205. if (dwStyle == LVS_ICON || dwStyle == LVS_SMALLICON)
  206. pCmdUI->Enable();
  207. else
  208. pCmdUI->Enable(FALSE);
  209. }
  210. else
  211. {
  212. // otherwise, use dots to reflect the style of the view
  213. pCmdUI->Enable();
  214. BOOL bChecked = FALSE;
  215. switch (pCmdUI->m_nID)
  216. {
  217. case ID_VIEW_DETAILS:
  218. bChecked = (dwStyle == LVS_REPORT);
  219. break;
  220. case ID_VIEW_SMALLICON:
  221. bChecked = (dwStyle == LVS_SMALLICON);
  222. break;
  223. case ID_VIEW_LARGEICON:
  224. bChecked = (dwStyle == LVS_ICON);
  225. break;
  226. case ID_VIEW_LIST:
  227. bChecked = (dwStyle == LVS_LIST);
  228. break;
  229. default:
  230. bChecked = FALSE;
  231. break;
  232. }
  233. pCmdUI->SetRadio(bChecked ? 1 : 0);
  234. }
  235. }
  236. }
  237. void CMainFrame::OnViewStyle(UINT nCommandID)
  238. {
  239. // TODO: customize or extend this code to handle choices on the
  240. // View menu.
  241. CListViewEx* pView = GetRightPane();
  242. // if the right-hand pane has been created and is a CListViewEx,
  243. // process the menu commands...
  244. if (pView != NULL)
  245. {
  246. DWORD dwStyle = (DWORD)-1;
  247. switch (nCommandID)
  248. {
  249. case ID_VIEW_LINEUP:
  250. {
  251. // ask the list control to snap to grid
  252. CListCtrl& refListCtrl = pView->GetListCtrl();
  253. refListCtrl.Arrange(LVA_SNAPTOGRID);
  254. }
  255. break;
  256. // other commands change the style on the list control
  257. case ID_VIEW_DETAILS:
  258. dwStyle = LVS_REPORT;
  259. break;
  260. case ID_VIEW_SMALLICON:
  261. dwStyle = LVS_SMALLICON;
  262. break;
  263. case ID_VIEW_LARGEICON:
  264. dwStyle = LVS_ICON;
  265. break;
  266. case ID_VIEW_LIST:
  267. dwStyle = LVS_LIST;
  268. break;
  269. }
  270. // change the style; window will repaint automatically
  271. if (dwStyle != -1)
  272. pView->ModifyStyle(LVS_TYPEMASK, dwStyle);
  273. }
  274. }
  275. void CMainFrame::CloseTreeViewPane()
  276. {
  277. ASSERT_VALID(this);
  278. m_wndCaption.SetChildWindow(m_pwndTreeCtrl, this);
  279. m_wndSplitter2.HideColumn(0);
  280. m_nColumn = 0;
  281. }
  282. void CMainFrame::OnPushPinButton()
  283. {
  284. m_wndSplitter2.ShowColumn();
  285. m_nColumn = 1;
  286. }
  287. void CMainFrame::OnPushPinCancel()
  288. {
  289. // TODO: Add your message handler code here and/or call default
  290. }
  291. void CMainFrame::UpdateButtonStyle(CXTCaptionButton& btnCaption)
  292. {
  293. UNREFERENCED_PARAMETER(btnCaption);
  294. }
  295. void CMainFrame::OnClose()
  296. {
  297. // Save the current state for command bars.
  298. SaveCommandBars(_T("CommandBars"));
  299. CMainFrameBase::OnClose();
  300. }
  301. void CMainFrame::OnCustomize()
  302. {
  303. // get a pointer to the command bars object.
  304. CXTPCommandBars* pCommandBars = GetCommandBars();
  305. if (pCommandBars == NULL)
  306. return;
  307. // instanciate the customize dialog
  308. CXTPCustomizeSheet dlg(pCommandBars);
  309. // add the options page to the customize dialog.
  310. CXTPCustomizeOptionsPage pageOptions(&dlg);
  311. dlg.AddPage(&pageOptions);
  312. // add the commands page to the customize dialog.
  313. CXTPCustomizeCommandsPage* pPageCommands = dlg.GetCommandsPage();
  314. pPageCommands->AddCategories(IDR_MAINFRAME);
  315. // initialize the commands page page.
  316. pPageCommands->InsertAllCommandsCategory();
  317. pPageCommands->InsertBuiltInMenus(IDR_MAINFRAME);
  318. pPageCommands->InsertNewMenuCategory();
  319. // display the customize dialog.
  320. dlg.DoModal();
  321. }
  322. void CMainFrame::SetTheme(int iTheme)
  323. {
  324. m_iTheme = iTheme;
  325. XTThemeManager()->SetTheme((XTThemeStyle)m_iTheme);
  326. XTPPaintManager()->SetTheme((XTPPaintTheme)m_iTheme);
  327. if (m_iTheme == xtThemeOfficeXP)
  328. m_wndSplitter.SetSplitterStyle(XT_SPLIT_NOSIZE|XT_SPLIT_NOBORDER);
  329. else
  330. m_wndSplitter.SetSplitterStyle(XT_SPLIT_NOSIZE);
  331. RedrawWindow( NULL, NULL,
  332. RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN );
  333. RecalcLayout();
  334. }
  335. void CMainFrame::OnViewThemeDefault() 
  336. {
  337. SetTheme(xtThemeDefault);
  338. }
  339. void CMainFrame::OnUpdateViewThemeDefault(CCmdUI* pCmdUI) 
  340. {
  341. pCmdUI->SetCheck(m_iTheme == xtThemeDefault);
  342. }
  343. void CMainFrame::OnViewThemeOfficeXP() 
  344. {
  345. SetTheme(xtThemeOfficeXP);
  346. }
  347. void CMainFrame::OnUpdateViewThemeOfficeXP(CCmdUI* pCmdUI) 
  348. {
  349. pCmdUI->SetCheck(m_iTheme == xtThemeOfficeXP);
  350. }
  351. void CMainFrame::OnViewThemeOffice2003() 
  352. {
  353. SetTheme(xtThemeOffice2003);
  354. }
  355. void CMainFrame::OnUpdateViewThemeOffice2003(CCmdUI* pCmdUI) 
  356. {
  357. pCmdUI->SetCheck(m_iTheme == xtThemeOffice2003);
  358. }