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

对话框与窗口

开发平台:

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 "OutlookBar.h"
  22. #include "MainFrm.h"
  23. #include "LeftView.h"
  24. #include "OutlookBarView.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. ON_WM_CREATE()
  36. ON_COMMAND(ID_VIEW_THEME_DEFAULT, OnViewThemeDefault)
  37. ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_DEFAULT, OnUpdateViewThemeDefault)
  38. ON_COMMAND(ID_VIEW_THEME_OFFICEXP, OnViewThemeOfficeXP)
  39. ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_OFFICEXP, OnUpdateViewThemeOfficeXP)
  40. ON_COMMAND(ID_VIEW_THEME_OFFICE2003, OnViewThemeOffice2003)
  41. ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_OFFICE2003, OnUpdateViewThemeOffice2003)
  42. //}}AFX_MSG_MAP
  43. ON_WM_CLOSE()
  44. ON_COMMAND(XTP_ID_CUSTOMIZE, OnCustomize)
  45. ON_MESSAGE(XTWM_OUTBAR_NOTIFY, OnOutbarNotify)
  46. END_MESSAGE_MAP()
  47. static UINT indicators[] =
  48. {
  49. ID_SEPARATOR,           // status line indicator
  50. ID_INDICATOR_CAPS,
  51. ID_INDICATOR_NUM,
  52. ID_INDICATOR_SCRL,
  53. };
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CMainFrame construction/destruction
  56. CMainFrame::CMainFrame()
  57. {
  58. // initialize themes.
  59. m_iTheme = m_regMgr.GetProfileInt(
  60. _T("Settings"), _T("Theme"), xtThemeOfficeXP);
  61. }
  62. CMainFrame::~CMainFrame()
  63. {
  64. m_regMgr.WriteProfileInt(
  65. _T("Settings"), _T("Theme"), m_iTheme);
  66. }
  67. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  68. {
  69. if (CMainFrameBase::OnCreate(lpCreateStruct) == -1)
  70. return -1;
  71. if (!m_wndStatusBar.Create(this) ||
  72. !m_wndStatusBar.SetIndicators(indicators,
  73. sizeof(indicators)/sizeof(UINT)))
  74. {
  75. TRACE0("Failed to create status barn");
  76. return -1;      // fail to create
  77. }
  78. if (!InitCommandBars())
  79. return -1;
  80. XTPPaintManager()->SetTheme((XTPPaintTheme)m_iTheme);
  81. CXTPCommandBars* pCommandBars = GetCommandBars();
  82. if(pCommandBars == NULL)
  83. {
  84. TRACE0("Failed to create command bars object.n");
  85. return -1;      // fail to create
  86. }
  87. pCommandBars->SetMenu(_T("Menu Bar"), IDR_MAINFRAME);
  88. CXTPToolBar* pCommandBar = (CXTPToolBar*)pCommandBars->Add(_T("Standard"), xtpBarTop);
  89. if (!pCommandBar ||
  90. !pCommandBar->LoadToolBar(IDR_MAINFRAME))
  91. {
  92. TRACE0("Failed to create toolbarn");
  93. return -1;
  94. }
  95. // Load the previous state for command bars.
  96. LoadCommandBars(_T("CommandBars"));
  97. SetTheme(m_iTheme);
  98. return 0;
  99. }
  100. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
  101. CCreateContext* pContext)
  102. {
  103. // create splitter window
  104. if (!m_wndSplitter.CreateStatic(this, 1, 2))
  105. return FALSE;
  106. // Here we create the outbar control using the splitter as its parent
  107. // and setting its id to the first pane.
  108. if (!m_wndOutlookBar.Create(WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN, CRect(0,0,0,0),
  109. &m_wndSplitter, m_wndSplitter.IdFromRowCol(0, 0), OBS_XT_DEFAULT|OBS_XT_ANIMATION/*|OBS_XT_SELHIGHLIGHT*/))
  110. {
  111. TRACE0("Failed to create outlook bar.");
  112. return FALSE;
  113. }
  114. // create the tree control.
  115. if (!m_wndTreeCtrl.Create(WS_BORDER|WS_CHILD|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS|TVS_SHOWSELALWAYS,
  116. CRect(0,0,0,0), &m_wndOutlookBar, IDC_TREE_CTRL))
  117. {
  118. TRACE0( "Unable to create tree control.n" );
  119. return FALSE;
  120. }
  121. // create the tree control.
  122. // create the image lists used by the caption and tree controls.
  123. if (!InitializeImageLists())
  124. return FALSE;
  125. // fill the tree control.
  126. if (!InitilalizeTreeControl())
  127. return FALSE;
  128. m_wndTreeCtrl.SetOwner(this);
  129. if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(COutlookBarView),
  130. CSize(100, 100), pContext))
  131. {
  132. m_wndSplitter.DestroyWindow();
  133. return FALSE;
  134. }
  135. // Set the background and text color of the outlook bar.
  136. //  m_wndOutlookBar.SetBackColor(RGB(0x3a,0x6e,0xa5));
  137. //  m_wndOutlookBar.SetTextColor(RGB(0xff,0xff,0xff));
  138. // Set the default sizes for the splitter panes.
  139. CRect r;
  140. GetClientRect(&r);
  141. m_wndSplitter.SetColumnInfo( 0, r.Width()/4, 0 );
  142. m_wndSplitter.RecalcLayout();
  143. // Add items to the outlook bar.
  144. InitializeOutlookBar();
  145. return TRUE;
  146. }
  147. static UINT nIcons[] =
  148. {
  149. IDI_ICON1, IDI_ICON3,  IDI_ICON4,  IDI_ICON7,
  150. IDI_ICON8, IDI_ICON2,  IDI_ICON11, IDI_ICON6,
  151. IDI_ICON9, IDI_ICON10, IDI_ICON5
  152. };
  153. BOOL CMainFrame::InitilalizeTreeControl()
  154. {
  155. // Set the tree controls image list.
  156. m_wndTreeCtrl.SetImageList (&m_ilTreeIcons, TVSIL_NORMAL);
  157. // TODO: Add items to the tree control.
  158. HTREEITEM hItem = m_wndTreeCtrl.InsertItem( _T("Outlook Today"), 0, 0);
  159. m_wndTreeCtrl.InsertItem (_T("Calendar"), 1, 1, hItem);
  160. m_wndTreeCtrl.InsertItem (_T("Contacts"), 2, 2, hItem);
  161. m_wndTreeCtrl.InsertItem (_T("Deleted Items"), 3, 3, hItem);
  162. m_wndTreeCtrl.InsertItem (_T("Drafts"), 4, 4, hItem);
  163. m_wndTreeCtrl.InsertItem (_T("Inbox"), 5, 5, hItem);
  164. m_wndTreeCtrl.InsertItem (_T("Journal"), 6, 6, hItem);
  165. m_wndTreeCtrl.InsertItem (_T("Notes"), 7, 7, hItem);
  166. m_wndTreeCtrl.InsertItem (_T("Outbox"), 8, 8, hItem);
  167. m_wndTreeCtrl.InsertItem (_T("Sent Items"), 9, 9, hItem);
  168. m_wndTreeCtrl.InsertItem (_T("Tasks"), 10, 10, hItem);
  169. m_wndTreeCtrl.SetItemBold (hItem, TRUE);
  170. m_wndTreeCtrl.Expand (hItem, TVE_EXPAND);
  171. m_wndTreeCtrl.SelectItem(hItem);
  172. return TRUE;
  173. }
  174. BOOL CMainFrame::InitializeImageLists()
  175. {
  176. // Create the image list used by the caption button.
  177. if (!m_ilCaption.Create(XT_IDB_BTN_OUT, 16, 1, RGB(255,0,255)))
  178. return FALSE;
  179. // Create the image list used by the tree control.
  180. if (!m_ilTreeIcons.Create (16, 16, TRUE, 2, 1))
  181. return FALSE;
  182. // TODO: Load your icons that you want displayed in the tree
  183. // control here, then add them to the image list.
  184. int i;
  185. for (i = 0; i < _countof(nIcons); ++i)
  186. {
  187. HICON hIcon = AfxGetApp()->LoadIcon(nIcons[i]);
  188. ASSERT(hIcon);
  189. m_ilTreeIcons.Add(hIcon);
  190. }
  191. return TRUE;
  192. }
  193. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  194. {
  195. if( !CFrameWnd::PreCreateWindow(cs) )
  196. return FALSE;
  197. cs.lpszClass = _T("XTPMainFrame");
  198. CXTPDrawHelpers::RegisterWndClass(AfxGetInstanceHandle(), cs.lpszClass, 
  199. CS_DBLCLKS, AfxGetApp()->LoadIcon(IDR_MAINFRAME));
  200. return TRUE;
  201. }
  202. /////////////////////////////////////////////////////////////////////////////
  203. // CMainFrame diagnostics
  204. #ifdef _DEBUG
  205. void CMainFrame::AssertValid() const
  206. {
  207. CFrameWnd::AssertValid();
  208. }
  209. void CMainFrame::Dump(CDumpContext& dc) const
  210. {
  211. CFrameWnd::Dump(dc);
  212. }
  213. #endif //_DEBUG
  214. /////////////////////////////////////////////////////////////////////////////
  215. // CMainFrame message handlers
  216. void CMainFrame::InitializeOutlookBar()
  217. {
  218. // Create the image lists used by the outlook bar.
  219. m_ImageSmall.Create (16, 16, ILC_COLOR16|ILC_MASK, 2, 1);
  220. m_ImageLarge.Create (32, 32, ILC_COLOR16|ILC_MASK, 2, 1);
  221. // initiailize the image lists.
  222. int i;
  223. for (i = 0; i < _countof(nIcons); ++i)
  224. {
  225. HICON hIcon = AfxGetApp()->LoadIcon(nIcons[i]);
  226. ASSERT(hIcon);
  227. m_ImageSmall.Add(hIcon);
  228. m_ImageLarge.Add(hIcon);
  229. }
  230. int iFolder; // index of the added folder
  231. // set the image lists for the outlook bar.
  232. m_wndOutlookBar.SetImageList(&m_ImageLarge, OBS_XT_LARGEICON);
  233. m_wndOutlookBar.SetImageList(&m_ImageSmall, OBS_XT_SMALLICON);
  234. // Add the first folder to the outlook bar.
  235. iFolder = m_wndOutlookBar.AddFolder(_T("Shortcuts 1"), 0);
  236. // Add items to the folder, syntax is folder, index, text, image, and item data.
  237. m_wndOutlookBar.InsertItem(iFolder, 1, _T("Item 1"), 0, NULL);
  238. m_wndOutlookBar.InsertItem(iFolder, 2, _T("Disabled Item 2"), 1, NULL);
  239. m_wndOutlookBar.InsertItem(iFolder, 3, _T("Disabled Item 3"), 2, NULL);
  240. m_wndOutlookBar.InsertItem(iFolder, 4, _T("Item 4"), 3, NULL);
  241. m_wndOutlookBar.InsertItem(iFolder, 5, _T("Item 5"), 4, NULL);
  242. m_wndOutlookBar.InsertItem(iFolder, 6, _T("Item 6"), 5, NULL);
  243. // Add the second folder to the outlook bar.
  244. iFolder = m_wndOutlookBar.AddFolder(_T("Shortcuts 2"), 1);
  245. // Add items to the folder, syntax is folder, index, text, image, and item data.
  246. m_wndOutlookBar.InsertItem(iFolder, 1, _T("Item 1"), 0, NULL);
  247. m_wndOutlookBar.InsertItem(iFolder, 2, _T("Item 2"), 1, NULL);
  248. // Add the tree control to the outlook bar.
  249. iFolder = m_wndOutlookBar.AddFolderBar(_T("Tree Control"), &m_wndTreeCtrl );
  250. // Set the default font used by the outlook bar.
  251. m_wndOutlookBar.SetFontX(&XTAuxData().font);
  252. // We want to receive notification messages.
  253. m_wndOutlookBar.SetOwner(this);
  254. // Select the first folder in the bar.
  255. m_wndOutlookBar.SetSelFolder(0);
  256. // Disable item 2 and 3
  257. m_wndOutlookBar.EnableItem( 0, 1, false );
  258. m_wndOutlookBar.EnableItem( 0, 2, false );
  259. }
  260. LRESULT CMainFrame::OnOutbarNotify(WPARAM wParam, LPARAM lParam)
  261. {
  262. int nBarAction = (int)wParam;
  263. // Cast the lParam to a XT_OUTBAR_INFO* struct pointer.
  264. XT_OUTBAR_INFO* pOBInfo = (XT_OUTBAR_INFO*)lParam;
  265. ASSERT(pOBInfo);
  266. switch (nBarAction)
  267. {
  268. case OBN_XT_ITEMCLICK:
  269. {
  270. CString strMessage;
  271. strMessage.Format( _T("Item selected: %d, Name: %s.n"), pOBInfo->nIndex, pOBInfo->lpszText);
  272. AfxMessageBox(strMessage);
  273. break;
  274. }
  275. case OBN_XT_FOLDERCHANGE:
  276. TRACE2( "Folder selected: %d, Name: %s.n", pOBInfo->nIndex, pOBInfo->lpszText);
  277. break;
  278. case OBN_XT_ONLABELENDEDIT:
  279. TRACE2( "Item edited: %d, New name: %s.n", pOBInfo->nIndex, pOBInfo->lpszText);
  280. break;
  281. case OBN_XT_ONGROUPENDEDIT:
  282. TRACE2( "Folder edited: %d, New name: %s.n", pOBInfo->nIndex, pOBInfo->lpszText);
  283. break;
  284. case OBN_XT_DRAGITEM:
  285. TRACE3( "Dragging From: %d, To: %d, Name: %s.n", pOBInfo->nDragFrom, pOBInfo->nDragTo, pOBInfo->lpszText);
  286. break;
  287. case OBN_XT_ITEMHOVER:
  288. TRACE2( "Hovering Item: %d, Name: %s.n", pOBInfo->nIndex, pOBInfo->lpszText);
  289. break;
  290. case OBN_XT_DELETEITEM:
  291. if (m_wndOutlookBar.IsWindowVisible() && AfxMessageBox(_T("Are you sure you want to remove this folder shortcut?"),
  292. MB_ICONWARNING|MB_YESNO) == IDNO)
  293. {
  294. // The user selected No, return FALSE to abort the action.
  295. return FALSE;
  296. }
  297. TRACE2( "Item deleted: %d, Name: %s.n", pOBInfo->nIndex, pOBInfo->lpszText);
  298. break;
  299. case OBN_XT_DELETEFOLDER:
  300. if (m_wndOutlookBar.IsWindowVisible() && AfxMessageBox(_T("Are you sure you want to remove the specified folder?"),
  301. MB_ICONWARNING|MB_YESNO) == IDNO)
  302. {
  303. // The user selected No, return FALSE to abort the action.
  304. return FALSE;
  305. }
  306. TRACE2( "Folder deleted: %d, Name: %s.n", pOBInfo->nIndex, pOBInfo->lpszText);
  307. break;
  308. }
  309. return TRUE;
  310. }
  311. BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext)
  312. {
  313. if ( !CFrameWnd::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext) )
  314. {
  315. return FALSE;
  316. }
  317. return TRUE;
  318. }
  319. void CMainFrame::OnClose()
  320. {
  321. // Save the current state for command bars.
  322. SaveCommandBars(_T("CommandBars"));
  323. CMainFrameBase::OnClose();
  324. }
  325. void CMainFrame::OnCustomize()
  326. {
  327. // get a pointer to the command bars object.
  328. CXTPCommandBars* pCommandBars = GetCommandBars();
  329. if (pCommandBars == NULL)
  330. return;
  331. // instanciate the customize dialog
  332. CXTPCustomizeSheet dlg(pCommandBars);
  333. // add the options page to the customize dialog.
  334. CXTPCustomizeOptionsPage pageOptions(&dlg);
  335. dlg.AddPage(&pageOptions);
  336. // add the commands page to the customize dialog.
  337. CXTPCustomizeCommandsPage* pPageCommands = dlg.GetCommandsPage();
  338. pPageCommands->AddCategories(IDR_MAINFRAME);
  339. // initialize the commands page page.
  340. pPageCommands->InsertAllCommandsCategory();
  341. pPageCommands->InsertBuiltInMenus(IDR_MAINFRAME);
  342. pPageCommands->InsertNewMenuCategory();
  343. // display the customize dialog.
  344. dlg.DoModal();
  345. }
  346. void CMainFrame::SetTheme(int iTheme)
  347. {
  348. m_iTheme = iTheme;
  349. XTThemeManager()->SetTheme((XTThemeStyle)m_iTheme);
  350. XTPPaintManager()->SetTheme((XTPPaintTheme)m_iTheme);
  351. RedrawWindow( NULL, NULL,
  352. RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN );
  353. RecalcLayout();
  354. }
  355. void CMainFrame::OnViewThemeDefault() 
  356. {
  357. SetTheme(xtThemeDefault);
  358. }
  359. void CMainFrame::OnUpdateViewThemeDefault(CCmdUI* pCmdUI) 
  360. {
  361. pCmdUI->SetCheck(m_iTheme == xtThemeDefault);
  362. }
  363. void CMainFrame::OnViewThemeOfficeXP() 
  364. {
  365. SetTheme(xtThemeOfficeXP);
  366. }
  367. void CMainFrame::OnUpdateViewThemeOfficeXP(CCmdUI* pCmdUI) 
  368. {
  369. pCmdUI->SetCheck(m_iTheme == xtThemeOfficeXP);
  370. }
  371. void CMainFrame::OnViewThemeOffice2003() 
  372. {
  373. SetTheme(xtThemeOffice2003);
  374. }
  375. void CMainFrame::OnUpdateViewThemeOffice2003(CCmdUI* pCmdUI) 
  376. {
  377. pCmdUI->SetCheck(m_iTheme == xtThemeOffice2003);
  378. }