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 "ActivePaneView.h"
  22. #include "MainFrm.h"
  23. #include "ViewOne.h"
  24. #include "ViewTwo.h"
  25. #ifdef _DEBUG
  26. #define new DEBUG_NEW
  27. #undef THIS_FILE
  28. static char THIS_FILE[] = __FILE__;
  29. #endif
  30. /////////////////////////////////////////////////////////////////////////////
  31. // CMainFrame
  32. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  33. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  34. //{{AFX_MSG_MAP(CMainFrame)
  35. // NOTE - the ClassWizard will add and remove mapping macros here.
  36. //    DO NOT EDIT what you see in these blocks of generated code !
  37. ON_WM_CREATE()
  38. ON_WM_CLOSE()
  39. //}}AFX_MSG_MAP
  40. ON_COMMAND(XTP_ID_CUSTOMIZE, OnCustomize)
  41. ON_MESSAGE(XTPWM_DOCKINGPANE_NOTIFY, OnDockingPaneNotify)
  42. END_MESSAGE_MAP()
  43. static UINT indicators[] =
  44. {
  45. ID_SEPARATOR,           // status line indicator
  46. ID_INDICATOR_CAPS,
  47. ID_INDICATOR_NUM,
  48. ID_INDICATOR_SCRL,
  49. };
  50. static UINT uHideCmds[] =
  51. {
  52. ID_FILE_PRINT,
  53. ID_FILE_PRINT_PREVIEW,
  54. };
  55. /////////////////////////////////////////////////////////////////////////////
  56. // CMainFrame construction/destruction
  57. CMainFrame::CMainFrame()
  58. : m_pViewOne(NULL)
  59. , m_pViewTwo(NULL)
  60. , m_pActivePane(NULL)
  61. {
  62. // TODO: add member initialization code here
  63. }
  64. CMainFrame::~CMainFrame()
  65. {
  66. }
  67. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  68. {
  69. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  70. return -1;
  71. // Create Status bar.
  72. // Important: All control bars including the Status Bar
  73. // must be created before CommandBars....
  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. // Initialize the command bars
  82. if (!InitCommandBars())
  83. return -1;
  84. // Get a pointer to the command bars object.
  85. CXTPCommandBars* pCommandBars = GetCommandBars();
  86. if(pCommandBars == NULL)
  87. {
  88. TRACE0("Failed to create command bars object.n");
  89. return -1;      // fail to create
  90. }
  91. // Add the menu bar
  92. CXTPCommandBar* pMenuBar = pCommandBars->SetMenu(
  93. _T("Menu Bar"), IDR_MAINFRAME);
  94. if(pMenuBar == NULL)
  95. {
  96. TRACE0("Failed to create menu bar.n");
  97. return -1;      // fail to create
  98. }
  99. // Create ToolBar
  100. CXTPToolBar* pToolBar = (CXTPToolBar*)
  101. pCommandBars->Add(_T("Standard"), xtpBarTop);
  102. if (!pToolBar || !pToolBar->LoadToolBar(IDR_MAINFRAME))
  103. {
  104. TRACE0("Failed to create toolbarn");
  105. return -1;
  106. }
  107. // Set Office 2003 Theme
  108. CXTPPaintManager::SetTheme(xtpThemeOfficeXP);
  109. // Hide array of commands
  110. pCommandBars->HideCommands(uHideCmds, _countof(uHideCmds));
  111. // Set "Always Show Full Menus" option to the FALSE
  112. pCommandBars->GetCommandBarsOptions()->bAlwaysShowFullMenus = FALSE;
  113. // Load the previous state for toolbars and menus.
  114. LoadCommandBars(_T("CommandBars"));
  115. // Initialize the docking pane manager and set the
  116. // initial them for the docking panes.  Do this only after all
  117. // control bars objects have been created and docked.
  118. m_paneManager.InstallDockingPanes(this);
  119. // Set Office 2003 Theme
  120. m_paneManager.SetTheme(xtpPaneThemeOffice);
  121. // Create docking panes.
  122. CXTPDockingPane* pwndPane1 = m_paneManager.CreatePane(
  123. IDR_PANE_OPTIONS, CRect(0, 0,200, 120), xtpPaneDockLeft);
  124. CXTPDockingPane* pwndPane2 = m_paneManager.CreatePane(
  125. IDR_PANE_PROPERTIES, CRect(0, 0,200, 120), xtpPaneDockBottom, pwndPane1);
  126. m_paneManager.CreatePane(
  127. IDR_PANE_DIALOG, CRect(0, 0,200, 120), xtpPaneDockBottom, pwndPane2);
  128. m_paneManager.EnableKeyboardNavigate();
  129. // Set the icons for the docking pane tabs.
  130. int nIDIcons[] = {IDR_PANE_OPTIONS, IDR_PANE_PROPERTIES, IDR_PANE_DIALOG};
  131. m_paneManager.SetIcons(IDB_BITMAP_ICONS, nIDIcons,
  132. _countof(nIDIcons), RGB(0, 255, 0));
  133. // Load the previous state for docking panes.
  134. CXTPDockingPaneLayout layoutNormal(&m_paneManager);
  135. if (layoutNormal.Load(_T("NormalLayout")))
  136. {
  137. m_paneManager.SetLayout(&layoutNormal);
  138. }
  139. return 0;
  140. }
  141. void CMainFrame::OnClose()
  142. {
  143. // Save the current state for toolbars and menus.
  144. SaveCommandBars(_T("CommandBars"));
  145. // Save the current state for docking panes.
  146. CXTPDockingPaneLayout layoutNormal(&m_paneManager);
  147. m_paneManager.GetLayout(&layoutNormal);
  148. layoutNormal.Save(_T("NormalLayout"));
  149. CFrameWnd::OnClose();
  150. }
  151. void CMainFrame::OnCustomize()
  152. {
  153. // Get a pointer to the command bars object.
  154. CXTPCommandBars* pCommandBars = GetCommandBars();
  155. if(pCommandBars != NULL)
  156. {
  157. // Instanciate the customize dialog object.
  158. CXTPCustomizeSheet dlg(pCommandBars);
  159. // Add the options page to the customize dialog.
  160. CXTPCustomizeOptionsPage pageOptions(&dlg);
  161. dlg.AddPage(&pageOptions);
  162. // Add the commands page to the customize dialog.
  163. CXTPCustomizeCommandsPage* pCommands = dlg.GetCommandsPage();
  164. pCommands->AddCategories(IDR_MAINFRAME);
  165. // Use the command bar manager to initialize the
  166. // customize dialog.
  167. pCommands->InsertAllCommandsCategory();
  168. pCommands->InsertBuiltInMenus(IDR_MAINFRAME);
  169. pCommands->InsertNewMenuCategory();
  170. // Dispaly the dialog.
  171. dlg.DoModal();
  172. }
  173. }
  174. LRESULT CMainFrame::OnDockingPaneNotify(WPARAM wParam, LPARAM lParam)
  175. {
  176. if (wParam == XTP_DPN_SHOWWINDOW)
  177. {
  178. CXTPDockingPane* pPane = (CXTPDockingPane*)lParam;
  179. if (!pPane->IsValid())
  180. {
  181. switch (pPane->GetID())
  182. {
  183. case IDR_PANE_DIALOG:
  184. if (!::IsWindow(m_dlgPane.m_hWnd))
  185. {
  186. m_dlgPane.Create(IDD_PANEDIALOG, this);
  187. }
  188. pPane->Attach(&m_dlgPane);
  189. break;
  190. case IDR_PANE_OPTIONS:
  191. {
  192. if (!m_pViewOne)
  193. {
  194. m_pViewOne = DYNAMIC_DOWNCAST(CViewOne,
  195. pPane->AttachView(this, RUNTIME_CLASS(CViewOne)));
  196. }
  197. else
  198. {
  199. pPane->Attach(m_pViewOne->GetParent());
  200. }
  201. break;
  202. }
  203. case IDR_PANE_PROPERTIES:
  204. {
  205. if (!m_pViewTwo)
  206. {
  207. m_pViewTwo = DYNAMIC_DOWNCAST(CViewTwo,
  208. pPane->AttachView(this, RUNTIME_CLASS(CViewTwo)));
  209. else
  210. {
  211. pPane->Attach(m_pViewTwo->GetParent());
  212. }
  213. break;
  214. }
  215. }
  216. }
  217. return TRUE;
  218. }
  219. return FALSE;
  220. }
  221. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  222. {
  223. if( !CFrameWnd::PreCreateWindow(cs) )
  224. return FALSE;
  225. cs.lpszClass = _T("XTPMainFrame");
  226. CXTPDrawHelpers::RegisterWndClass(AfxGetInstanceHandle(), cs.lpszClass, 
  227. CS_DBLCLKS, AfxGetApp()->LoadIcon(IDR_MAINFRAME));
  228. cs.style |= WS_CLIPCHILDREN|WS_CLIPSIBLINGS;
  229. return TRUE;
  230. }
  231. /////////////////////////////////////////////////////////////////////////////
  232. // CMainFrame diagnostics
  233. #ifdef _DEBUG
  234. void CMainFrame::AssertValid() const
  235. {
  236. CFrameWnd::AssertValid();
  237. }
  238. void CMainFrame::Dump(CDumpContext& dc) const
  239. {
  240. CFrameWnd::Dump(dc);
  241. }
  242. #endif //_DEBUG
  243. /////////////////////////////////////////////////////////////////////////////
  244. // CMainFrame message handlers
  245. // The following code will ensure that messages are correctly routed to
  246. // the docking pane child views.
  247. CXTPDockingPane* CMainFrame::GetActivePane()
  248. {
  249. return m_paneManager.GetActivePane();
  250. }
  251. CWnd* CMainFrame::GetActivePaneView()
  252. {
  253. CXTPDockingPane* pActivePane = GetActivePane();
  254. if (pActivePane)
  255. return pActivePane->GetChild();
  256. return NULL;
  257. }
  258. BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
  259. {
  260. // Use GetActivePane() to search the pane manager's list for the pane
  261. // with a view that has input focus.  If one is found, give the view an
  262. // opportunity to handle the OnCmdMsg first before we pass it to the base
  263. // class.
  264. CWnd* pView = GetActivePaneView();
  265. if (pView != NULL && pView->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  266. {
  267. return TRUE; // handled.
  268. }
  269. return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
  270. }
  271. void CMainFrame::OnSetPreviewMode(BOOL bPreview, CPrintPreviewState* pState)
  272. {
  273. // Toggle CommandBars
  274. GetCommandBars()->OnSetPreviewMode(bPreview);
  275. // Toggle Docking Panes.
  276. m_paneManager.OnSetPreviewMode(bPreview);
  277. CFrameWnd::OnSetPreviewMode(bPreview, pState);
  278. }