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 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 
  7. // BE RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED 
  8. // WRITTEN CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS 
  11. // OUTLINED IN THE XTREME TOOLKIT LICENSE AGREEMENT.  CODEJOCK SOFTWARE 
  12. // GRANTS TO YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE 
  13. // THIS SOFTWARE ON A SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. //////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "MDITabWindows.h"
  22. #include "MainFrm.h"
  23. #ifdef _DEBUG
  24. #define new DEBUG_NEW
  25. #undef THIS_FILE
  26. static char THIS_FILE[] = __FILE__;
  27. #endif
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CMainFrame
  30. IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
  31. BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
  32. //{{AFX_MSG_MAP(CMainFrame)
  33. ON_WM_CREATE()
  34. ON_COMMAND(IDC_ACTIVATE, OnActivate)
  35. ON_COMMAND(IDC_CLOSEDOCUMENT, OnClosedocument)
  36. ON_COMMAND(IDC_HIDETABS, OnHidetabs)
  37. ON_COMMAND(IDC_ALIGNTABLEFT, OnAligntableft)
  38. ON_COMMAND(IDC_ALIGNTABTOP, OnAligntabtop)
  39. ON_COMMAND(IDC_ALIGNTABRIGHT, OnAligntabright)
  40. ON_COMMAND(IDC_ALIGNTABBOTTOM, OnAligntabbottom)
  41. ON_UPDATE_COMMAND_UI(IDC_ALIGNTABLEFT, OnUpdateAligntableft)
  42. ON_UPDATE_COMMAND_UI(IDC_ALIGNTABTOP, OnUpdateAligntabtop)
  43. ON_UPDATE_COMMAND_UI(IDC_ALIGNTABRIGHT, OnUpdateAligntabright)
  44. ON_UPDATE_COMMAND_UI(IDC_ALIGNTABBOTTOM, OnUpdateAligntabbottom)
  45. ON_COMMAND(ID_SHOW_MDITABS, OnShowMditabs)
  46. ON_UPDATE_COMMAND_UI(ID_SHOW_MDITABS, OnUpdateShowMditabs)
  47. ON_COMMAND(ID_VIEW_THEME_OFFICEXP, OnViewThemeOfficeXP)
  48. ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_OFFICEXP, OnUpdateViewThemeOfficeXP)
  49. ON_UPDATE_COMMAND_UI(ID_WINDOW_CASCADE, OnUpdateWindowCascade)
  50. ON_UPDATE_COMMAND_UI(ID_WINDOW_TILE_HORZ, OnUpdateWindowTileHorz)
  51. ON_UPDATE_COMMAND_UI(ID_WINDOW_ARRANGE, OnUpdateWindowArrange)
  52. //}}AFX_MSG_MAP
  53. ON_WM_CLOSE()
  54. ON_COMMAND(XTP_ID_CUSTOMIZE, OnCustomize)
  55. END_MESSAGE_MAP()
  56. static UINT indicators[] =
  57. {
  58. ID_SEPARATOR,           // status line indicator
  59. ID_INDICATOR_CAPS,
  60. ID_INDICATOR_NUM,
  61. ID_INDICATOR_SCRL,
  62. };
  63. static UINT toolbars[] =
  64. {
  65. IDR_MAINFRAME,
  66. IDR_TAB_POPUP,
  67. };
  68. /////////////////////////////////////////////////////////////////////////////
  69. // CMainFrame construction/destruction
  70. CMainFrame::CMainFrame()
  71. {
  72. // TODO: add member initialization code here
  73. m_bMDIActive    = TRUE;
  74. m_bAlignment[0] = FALSE; // left
  75. m_bAlignment[1] = TRUE;  // top
  76. m_bAlignment[2] = FALSE; // right
  77. m_bAlignment[3] = FALSE; // bottom
  78. // initialize themes.
  79. m_iTheme = m_regMgr.GetProfileInt(
  80. _T("Settings"), _T("Theme"), xtThemeOfficeXP);
  81. }
  82. CMainFrame::~CMainFrame()
  83. {
  84. m_regMgr.WriteProfileInt(
  85. _T("Settings"), _T("Theme"), m_iTheme);
  86. }
  87. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  88. {
  89. if (CMainFrameBase::OnCreate(lpCreateStruct) == -1)
  90. return -1;
  91. if (!m_wndStatusBar.Create(this) ||
  92. !m_wndStatusBar.SetIndicators(indicators,
  93.   sizeof(indicators)/sizeof(UINT)))
  94. {
  95. TRACE0("Failed to create status barn");
  96. return -1;      // fail to create
  97. }
  98. if (!InitCommandBars())
  99. return -1;
  100. CXTPCommandBars* pCommandBars = GetCommandBars();
  101. if(pCommandBars == NULL)
  102. {
  103. TRACE0("Failed to create command bars object.n");
  104. return -1;      // fail to create
  105. }
  106. pCommandBars->SetMenu(_T("Menu Bar"), IDR_MAINFRAME);
  107. CXTPToolBar* pCommandBar = (CXTPToolBar*)pCommandBars->Add(_T("Standard"), xtpBarTop);
  108. if (!pCommandBar ||
  109. !pCommandBar->LoadToolBar(IDR_MAINFRAME))
  110. {
  111. TRACE0("Failed to create toolbarn");
  112. return -1;
  113. }
  114. // Load the previous state for command bars.
  115. LoadCommandBars(_T("CommandBars"));
  116. SetTheme(m_iTheme);
  117. // Install the MDI tab window and set the popup menu id.
  118. m_wndMDITabWindow.Install(this, NULL, (m_iTheme == xtThemeOfficeXP));
  119. // Set the menu id for the tab control, make IDC_ACTIVATE the
  120. // default menu item.
  121. m_wndMDITabWindow.SetMenuID(IDR_TAB_POPUP, 0, IDC_ACTIVATE);
  122. return 0;
  123. }
  124. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  125. {
  126. if( !CMainFrameBase::PreCreateWindow(cs) )
  127. return FALSE;
  128. cs.lpszClass = _T("XTPMainFrame");
  129. CXTPDrawHelpers::RegisterWndClass(AfxGetInstanceHandle(), cs.lpszClass, 
  130. CS_DBLCLKS, AfxGetApp()->LoadIcon(IDR_MAINFRAME));
  131. return TRUE;
  132. }
  133. /////////////////////////////////////////////////////////////////////////////
  134. // CMainFrame diagnostics
  135. #ifdef _DEBUG
  136. void CMainFrame::AssertValid() const
  137. {
  138. CMainFrameBase::AssertValid();
  139. }
  140. void CMainFrame::Dump(CDumpContext& dc) const
  141. {
  142. CMainFrameBase::Dump(dc);
  143. }
  144. #endif //_DEBUG
  145. /////////////////////////////////////////////////////////////////////////////
  146. // CMainFrame message handlers
  147. void CMainFrame::ToggleMDITabs()
  148. {
  149. m_bMDIActive = !m_bMDIActive;
  150. if ( m_bMDIActive )
  151. {
  152. SetMDITabStyle();
  153. // make sure the MDI child is maximized.
  154. CFrameWnd* pChild = GetActiveFrame();
  155. if ( pChild && ::IsWindow( pChild->m_hWnd ) )
  156. {
  157. DWORD dwStyle = ::GetWindowLong( pChild->m_hWnd, GWL_STYLE );
  158. if ( ( dwStyle & WS_MAXIMIZE ) != WS_MAXIMIZE )
  159. {
  160. pChild->ShowWindow( SW_MAXIMIZE );
  161. }
  162. }
  163. }
  164. else
  165. {
  166. m_wndMDITabWindow.UnInstall( );
  167. }
  168. }
  169. void CMainFrame::HideMDITabs()
  170. {
  171. // TODO: Add your command handler code here
  172. m_wndMDITabWindow.UnInstall();
  173. m_bMDIActive = FALSE;
  174. }
  175. void CMainFrame::SetMDITabStyle()
  176. {
  177. DWORD dwStyle = TCS_HOTTRACK;
  178. // left align
  179. if (m_bAlignment[0]) {
  180. dwStyle |= TCS_VERTICAL;
  181. }
  182. // right align
  183. else if (m_bAlignment[2]) {
  184. dwStyle |= TCS_VERTICAL|TCS_RIGHT;
  185. }
  186. // bottom align
  187. else if (m_bAlignment[3]) {
  188. dwStyle |= TCS_BOTTOM;
  189. }
  190. // Update the tab control.
  191. m_wndMDITabWindow.UnInstall( );
  192. m_wndMDITabWindow.Install(this, dwStyle, FALSE);
  193. // TODO: Uncomment this line if you want to change the border size between
  194. // the client and tab control.
  195. // m_wndMDITabWindow.SetBorderGap(10);
  196. }
  197. void CMainFrame::OnShowMditabs() 
  198. {
  199.     ToggleMDITabs();
  200. }
  201. void CMainFrame::OnUpdateShowMditabs(CCmdUI* pCmdUI) 
  202. {
  203. pCmdUI->SetCheck(m_bMDIActive);
  204. }
  205. void CMainFrame::OnActivate() 
  206. {
  207. // TODO: Add your command handler code here
  208. CMDIChildWnd* pChildFrame = (CMDIChildWnd *)m_wndMDITabWindow.GetFrameWnd();
  209. ASSERT_VALID(pChildFrame);
  210. MDIActivate(pChildFrame);
  211. }
  212. void CMainFrame::OnClosedocument() 
  213. {
  214. // TODO: Add your command handler code here
  215. CMDIChildWnd* pChildFrame = (CMDIChildWnd *)m_wndMDITabWindow.GetFrameWnd();
  216. ASSERT_VALID(pChildFrame);
  217. pChildFrame->SendMessage(WM_CLOSE);
  218. }
  219. void CMainFrame::OnHidetabs() 
  220. {
  221.     HideMDITabs();
  222. }
  223. void CMainFrame::SetAlignment(ALIGNMENT eAlign)
  224. {
  225. if (!m_bAlignment[eAlign])
  226. {
  227. int i;
  228. for (i = 0; i < _countof(m_bAlignment); ++i)
  229. m_bAlignment[i] = FALSE;
  230. m_bAlignment[eAlign] = TRUE;
  231. m_wndMDITabWindow.UnInstall();
  232. SetMDITabStyle();
  233. }
  234. }
  235. void CMainFrame::OnAligntableft() 
  236. {
  237. SetAlignment(left);
  238. }
  239. void CMainFrame::OnUpdateAligntableft(CCmdUI* pCmdUI) 
  240. {
  241. pCmdUI->SetRadio(m_bAlignment[left]);
  242. }
  243. void CMainFrame::OnAligntabtop() 
  244. {
  245. SetAlignment(top);
  246. }
  247. void CMainFrame::OnUpdateAligntabtop(CCmdUI* pCmdUI) 
  248. {
  249. pCmdUI->SetRadio(m_bAlignment[top]);
  250. }
  251. void CMainFrame::OnAligntabright() 
  252. {
  253. SetAlignment(right);
  254. }
  255. void CMainFrame::OnUpdateAligntabright(CCmdUI* pCmdUI) 
  256. {
  257. pCmdUI->SetRadio(m_bAlignment[right]);
  258. }
  259. void CMainFrame::OnAligntabbottom() 
  260. {
  261. SetAlignment(bottom);
  262. }
  263. void CMainFrame::OnUpdateAligntabbottom(CCmdUI* pCmdUI) 
  264. {
  265. pCmdUI->SetRadio(m_bAlignment[bottom]);
  266. }
  267. void CMainFrame::SetTheme(int iTheme)
  268. {
  269. m_iTheme = iTheme;
  270. XTThemeManager()->SetTheme((XTThemeStyle)m_iTheme);
  271. XTPPaintManager()->SetTheme((XTPPaintTheme)m_iTheme);
  272.     
  273. if ( ::IsWindow( m_wndMDITabWindow.m_hWnd ) )
  274. {
  275. if (m_iTheme == xtThemeOfficeXP)
  276. {
  277. m_wndMDITabWindow.SetBorderGap( 1 );
  278. }
  279. else
  280. {
  281. m_wndMDITabWindow.SetBorderGap( 5 );
  282. }
  283. }
  284.     CRect r;
  285.     GetWindowRect(&r);
  286.     r.InflateRect(0,0,1,0);
  287.     SetWindowPos(NULL, 0,0,r.Width(), r.Height(),
  288.         SWP_NOMOVE|SWP_FRAMECHANGED);
  289.     
  290.     r.InflateRect(0,0,-1,0);
  291.     SetWindowPos(NULL, 0,0,r.Width(), r.Height(),
  292.         SWP_NOMOVE|SWP_FRAMECHANGED);
  293. RedrawWindow( NULL, NULL,
  294. RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN );
  295. RecalcLayout();
  296. }
  297. void CMainFrame::OnViewThemeOfficeXP() 
  298. {
  299. SetTheme((m_iTheme == xtThemeOfficeXP)? xtThemeDefault: xtThemeOfficeXP);
  300. }
  301. void CMainFrame::OnUpdateViewThemeOfficeXP(CCmdUI* pCmdUI) 
  302. {
  303. pCmdUI->SetCheck(m_iTheme == xtThemeOfficeXP);
  304. }
  305. void CMainFrame::OnUpdateWindowCascade(CCmdUI* pCmdUI) 
  306. {
  307. pCmdUI->Enable(TRUE);
  308. }
  309. void CMainFrame::OnUpdateWindowTileHorz(CCmdUI* pCmdUI) 
  310. {
  311. pCmdUI->Enable(TRUE);
  312. }
  313. void CMainFrame::OnUpdateWindowArrange(CCmdUI* pCmdUI) 
  314. {
  315. pCmdUI->Enable(TRUE);
  316. }
  317. BEGIN_MESSAGE_MAP(CMDIWndTab, CXTMDIWndTab)
  318. ON_WM_RBUTTONDOWN()
  319. END_MESSAGE_MAP()
  320. void CMDIWndTab::OnRButtonDown(UINT /*nFlags*/, CPoint point) 
  321. {
  322. // Get the tab index based upon the cursor position.
  323. m_iHitTest = TabFromPoint(point);
  324. if (m_iHitTest != -1)
  325. {
  326. if (m_popupMenuID != 0)
  327. {
  328. CPoint pt = point;
  329. ClientToScreen(&pt);
  330. CMenu popupMenu;
  331. VERIFY(popupMenu.LoadMenu(m_popupMenuID));
  332. CMenu* pPopup = popupMenu.GetSubMenu(m_nPos);
  333. ASSERT(pPopup != NULL);
  334. if (m_nDefCmd != 0) {
  335. ::SetMenuDefaultItem(pPopup->m_hMenu, m_nDefCmd, FALSE);
  336. }
  337. CWnd* pWndPopupOwner = GetOwner();
  338. ASSERT_VALID(pWndPopupOwner);
  339. CXTPCommandBars::TrackPopupMenu(pPopup, TPM_RIGHTBUTTON,
  340. pt.x, pt.y, AfxGetMainWnd(), 0, 0, ((CXTPMDIFrameWnd*)AfxGetMainWnd())->GetCommandBars());
  341. }
  342. }
  343. }
  344. void CMainFrame::OnCustomize()
  345. {
  346.     // Get a pointer to the Command Bar object.
  347.     CXTPCommandBars* pCommandBars = GetCommandBars();
  348.     if(pCommandBars != NULL)
  349.     {
  350.         // Instanciate the customize dialog object.
  351.         CXTPCustomizeSheet dlg(pCommandBars);
  352.         // Add the options page to the customize dialog.
  353.         CXTPCustomizeOptionsPage pageOptions(&dlg);
  354.         dlg.AddPage(&pageOptions);
  355.         // Add the commands page to the customize dialog.
  356.         CXTPCustomizeCommandsPage* pCommands = dlg.GetCommandsPage();
  357.         pCommands->AddCategories(IDR_MDITABTYPE);
  358.         // Use the command bar manager to initialize the 
  359.         // customize dialog.
  360.         pCommands->InsertAllCommandsCategory();
  361.         pCommands->InsertBuiltInMenus(IDR_MDITABTYPE);
  362.         pCommands->InsertNewMenuCategory();
  363.         // Dispaly the dialog.
  364.         dlg.DoModal();
  365.     }
  366. }
  367. void CMainFrame::OnClose() 
  368. {
  369.     // Save the current state for toolbars and menus.
  370.     SaveCommandBars(_T("CommandBars"));
  371.     CMainFrameBase::OnClose();
  372. }