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

对话框与窗口

开发平台:

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 "TrayIconDemo.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_DYNCREATE(CMainFrame, CFrameWnd)
  31. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  32. //{{AFX_MSG_MAP(CMainFrame)
  33. ON_WM_CREATE()
  34. ON_COMMAND(ID_VIEW_THEME_OFFICEXP, OnViewThemeOfficeXP)
  35. ON_UPDATE_COMMAND_UI(ID_VIEW_THEME_OFFICEXP, OnUpdateViewThemeOfficeXP)
  36. ON_COMMAND(IDR_RESTORE, OnRestore)
  37. ON_COMMAND(ID_PROPERTIES, OnProperties)
  38. ON_COMMAND(ID_APP_EXIT, OnAppExit)
  39. //}}AFX_MSG_MAP
  40. ON_WM_CLOSE()
  41. ON_COMMAND(XTP_ID_CUSTOMIZE, OnCustomize)
  42. ON_MESSAGE(TIN_XT_TRAYICON, OnTrayIconNotify)
  43. END_MESSAGE_MAP()
  44. static UINT indicators[] =
  45. {
  46. ID_SEPARATOR,           // status line indicator
  47. ID_INDICATOR_CAPS,
  48. ID_INDICATOR_NUM,
  49. ID_INDICATOR_SCRL,
  50. };
  51. static UINT icoArray[] =
  52. {
  53. IDI_ICON2,
  54. IDI_ICON3,
  55. IDI_ICON4,
  56. IDI_ICON5
  57. };
  58. /////////////////////////////////////////////////////////////////////////////
  59. // CMainFrame construction/destruction
  60. CMainFrame::CMainFrame()
  61. {
  62. // initialize themes.
  63. m_iTheme = m_regMgr.GetProfileInt(
  64. _T("Settings"), _T("Theme"), xtThemeOfficeXP);
  65. }
  66. CMainFrame::~CMainFrame()
  67. {
  68. m_regMgr.WriteProfileInt(
  69. _T("Settings"), _T("Theme"), m_iTheme);
  70. }
  71. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  72. {
  73. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  74. return -1;
  75. if (!m_wndStatusBar.Create(this) ||
  76. !m_wndStatusBar.SetIndicators(indicators,
  77. sizeof(indicators)/sizeof(UINT)))
  78. {
  79. TRACE0("Failed to create status barn");
  80. return -1;      // fail to create
  81. }
  82. if (!InitCommandBars())
  83. return -1;
  84. CXTPCommandBars* pCommandBars = GetCommandBars();
  85. pCommandBars->SetMenu(_T("Menu Bar"), IDR_MAINFRAME);
  86. CXTPToolBar* pCommandBar = (CXTPToolBar*)pCommandBars->Add(_T("Standard"), xtpBarTop);
  87. if (!pCommandBar ||
  88. !pCommandBar->LoadToolBar(IDR_MAINFRAME))
  89. {
  90. TRACE0("Failed to create toolbarn");
  91. return -1;
  92. }
  93. ((CXTPControlButton*)pCommandBar->GetControls()->GetAt(8))->SetStyle(xtpButtonIconAndCaption);
  94. // Load the previous state for command bars.
  95. LoadCommandBars(_T("CommandBars"));
  96. SetTheme(m_iTheme);
  97. // Create the tray icon.
  98. if (!m_TrayIcon.Create(
  99. _T("Power Tools for MFC!"), // Toolktip text
  100. this,                       // Parent window
  101. IDI_TRAYICON,               // Icon resource ID
  102. IDR_POPUP_TRAY,             // Resource ID of popup menu
  103. IDR_RESTORE,                // Default menu item for popup menu
  104. false))                     // True if default menu item is located by position
  105. {
  106. TRACE0("Failed to create tray iconn");
  107. return -1;
  108. }
  109. m_TrayIcon.SetAnimationIcons(
  110. icoArray, _countof(icoArray));
  111. // Display the properties dialog.
  112. ::PostMessage(m_hWnd, WM_COMMAND, ID_PROPERTIES, 0);
  113. return 0;
  114. }
  115. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  116. {
  117. if( !CFrameWnd::PreCreateWindow(cs) )
  118. return FALSE;
  119. cs.lpszClass = _T("XTPMainFrame");
  120. CXTPDrawHelpers::RegisterWndClass(AfxGetInstanceHandle(), cs.lpszClass, 
  121. CS_DBLCLKS, AfxGetApp()->LoadIcon(IDR_MAINFRAME));
  122. return TRUE;
  123. }
  124. /////////////////////////////////////////////////////////////////////////////
  125. // CMainFrame diagnostics
  126. #ifdef _DEBUG
  127. void CMainFrame::AssertValid() const
  128. {
  129. CFrameWnd::AssertValid();
  130. }
  131. void CMainFrame::Dump(CDumpContext& dc) const
  132. {
  133. CFrameWnd::Dump(dc);
  134. }
  135. #endif //_DEBUG
  136. /////////////////////////////////////////////////////////////////////////////
  137. // CMainFrame message handlers
  138. void CMainFrame::OnRestore()
  139. {
  140. m_propDlg.MinMaxWindow();
  141. }
  142. void CMainFrame::SetTheme(int iTheme)
  143. {
  144. m_iTheme = iTheme;
  145. XTThemeManager()->SetTheme((XTThemeStyle)m_iTheme);
  146. XTPPaintManager()->SetTheme((XTPPaintTheme)m_iTheme);
  147. RedrawWindow( NULL, NULL,
  148. RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN );
  149. RecalcLayout();
  150. }
  151. void CMainFrame::OnViewThemeOfficeXP()
  152. {
  153. SetTheme((m_iTheme == xtThemeOfficeXP)? xtThemeDefault: xtThemeOfficeXP);
  154. }
  155. void CMainFrame::OnUpdateViewThemeOfficeXP(CCmdUI* pCmdUI)
  156. {
  157. pCmdUI->SetCheck(m_iTheme == xtThemeOfficeXP);
  158. }
  159. LRESULT CMainFrame::OnTrayIconNotify(WPARAM /*wParam*/, LPARAM lParam)
  160. {
  161. //UINT uID       = (UINT)wParam;  // resource ID of the tray icon.
  162. UINT uMouseMsg = (UINT)lParam;  // mouse message that was sent.
  163. // We can let the tray icon control handle our context menu and
  164. // mouse double click events, but we want handle our balloon tip
  165. // notifications, so we will return 1 to let the tray icon control
  166. // know that we have handled these messages already...
  167. switch( uMouseMsg )
  168. {
  169. // Sent when the balloon is shown (balloons are queued).
  170. case NIN_BALLOONSHOW:
  171. {
  172. }
  173. return 1;
  174. // Sent when the balloon disappears-for example, when the
  175. // icon is deleted. This message is not sent if the balloon
  176. // is dismissed because of a timeout or a mouse click.
  177. case NIN_BALLOONHIDE:
  178. {
  179. }
  180. return 1;
  181. // Sent when the balloon is dismissed because of a timeout.
  182. case NIN_BALLOONTIMEOUT:
  183. {
  184. }
  185. return 1;
  186. // Sent when the balloon is dismissed because of a mouse click.
  187. case NIN_BALLOONUSERCLICK:
  188. {
  189. CXTHyperLink hyperlink;
  190. hyperlink.GotoURL(_T("http://www.codejock.com/"));
  191. }
  192. return 1;
  193. case WM_RBUTTONUP:
  194. {
  195. CMenu menu;
  196. if (!menu.LoadMenu(IDR_POPUP_TRAY)) {
  197. return 0;
  198. }
  199. CMenu* pSubMenu = menu.GetSubMenu(0);
  200. if (pSubMenu == NULL) {
  201. return 0;
  202. }
  203. ::SetMenuDefaultItem(pSubMenu->m_hMenu, IDR_RESTORE, FALSE);
  204. // Display the menu at the current mouse location. There's a "bug"
  205. // (Microsoft calls it a feature) in Windows 95 that requires calling
  206. // SetForegroundWindow. To find out more, search for Q135788 in MSDN.
  207. //
  208. CPoint pos;
  209. GetCursorPos(&pos);
  210. ::SetForegroundWindow(m_hWnd);
  211. CXTPCommandBars::TrackPopupMenu(pSubMenu, 0, pos.x, pos.y,this);
  212. ::PostMessage(m_hWnd, WM_NULL, 0, 0);
  213. menu.DestroyMenu();
  214. }
  215. return 1;
  216. }
  217. return 0;
  218. }
  219. void CMainFrame::OnProperties()
  220. {
  221. // Display the properties dialog.
  222. m_propDlg.DoModal(this);
  223. }
  224. void CMainFrame::OnAppExit()
  225. {
  226. // if the properties dialog is open, close it...
  227. if (::IsWindow(m_propDlg.m_hWnd)) {
  228. ::SendMessage(m_propDlg.m_hWnd, WM_COMMAND, IDOK, 0);
  229. }
  230. // post a message to ourself to close
  231. ::PostMessage(m_hWnd, WM_CLOSE, 0, 0);
  232. }
  233. void CMainFrame::OnClose()
  234. {
  235. // Save the current state for command bars.
  236. SaveCommandBars(_T("CommandBars"));
  237. CFrameWnd::OnClose();
  238. }
  239. void CMainFrame::OnCustomize()
  240. {
  241. // get a pointer to the command bars object.
  242. CXTPCommandBars* pCommandBars = GetCommandBars();
  243. if (pCommandBars == NULL)
  244. return;
  245. // instanciate the customize dialog
  246. CXTPCustomizeSheet dlg(pCommandBars);
  247. // add the options page to the customize dialog.
  248. CXTPCustomizeOptionsPage pageOptions(&dlg);
  249. dlg.AddPage(&pageOptions);
  250. // add the commands page to the customize dialog.
  251. CXTPCustomizeCommandsPage* pPageCommands = dlg.GetCommandsPage();
  252. pPageCommands->AddCategories(IDR_MAINFRAME);
  253. // initialize the commands page page.
  254. pPageCommands->InsertAllCommandsCategory();
  255. pPageCommands->InsertBuiltInMenus(IDR_MAINFRAME);
  256. pPageCommands->InsertNewMenuCategory();
  257. // display the customize dialog.
  258. dlg.DoModal();
  259. }