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

对话框与窗口

开发平台:

Visual C++

  1. // MenuListBoxView.cpp : implementation file
  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 "Pager.h"
  22. #include "MenuListBoxView.h"
  23. #ifdef _DEBUG
  24. #define new DEBUG_NEW
  25. #undef THIS_FILE
  26. static char THIS_FILE[] = __FILE__;
  27. #endif
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CMenuListBoxView
  30. IMPLEMENT_DYNCREATE(CMenuListBoxView, CView)
  31. CMenuListBoxView::CMenuListBoxView()
  32. {
  33. }
  34. CMenuListBoxView::~CMenuListBoxView()
  35. {
  36. }
  37. #ifndef _countof
  38. #define _countof(array) (sizeof(array)/sizeof(array[0]))
  39. #endif
  40. BEGIN_MESSAGE_MAP(CMenuListBoxView, CView)
  41. //{{AFX_MSG_MAP(CMenuListBoxView)
  42. ON_WM_SIZE()
  43. ON_WM_CREATE()
  44. ON_MESSAGE( XTWM_OUTBAR_NOTIFY,  OnOutbarNotify )
  45. //}}AFX_MSG_MAP
  46. ON_NOTIFY(PGN_SCROLL, IDC_PAGER_CTRL, OnPagerScroll)
  47. ON_NOTIFY(PGN_CALCSIZE, IDC_PAGER_CTRL, OnPagerCalcSize)
  48. END_MESSAGE_MAP()
  49. /////////////////////////////////////////////////////////////////////////////
  50. // CMenuListBoxView drawing
  51. void CMenuListBoxView::OnDraw(CDC*)
  52. {
  53. }
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CMenuListBoxView diagnostics
  56. #ifdef _DEBUG
  57. void CMenuListBoxView::AssertValid() const
  58. {
  59. CView::AssertValid();
  60. }
  61. void CMenuListBoxView::Dump(CDumpContext& dc) const
  62. {
  63. CView::Dump(dc);
  64. }
  65. #endif //_DEBUG
  66. /////////////////////////////////////////////////////////////////////////////
  67. // CMenuListBoxView message handlers
  68. void CMenuListBoxView::OnSize(UINT nType, int cx, int cy)
  69. {
  70. CView::OnSize(nType, cx, cy);
  71. if(m_wndPager.GetSafeHwnd()) {
  72. m_wndPager.MoveWindow(0,0,cx,cy);
  73. }
  74. }
  75. int CMenuListBoxView::OnCreate(LPCREATESTRUCT lpCreateStruct)
  76. {
  77. if (CView::OnCreate(lpCreateStruct) == -1)
  78. return -1;
  79. // Create the pager control.
  80. if (!m_wndPager.Create(WS_CHILD|WS_VISIBLE|PGS_VERT,
  81. CRect(0,0,0,0), this, IDC_PAGER_CTRL ))
  82. {
  83. TRACE0("Failed to create CPagerCtrl...n");
  84. return -1;
  85. }
  86. // Create the OutlookBar control using m_wndPager as the parent.
  87. if (!m_wndMenuListBox.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP,
  88. CRect(0,0,0,0), &m_wndPager, IDC_OUTBAR ))
  89. {
  90. TRACE0("Failed to create COutlookBar...n");
  91. return -1;
  92. }
  93. // Set the CWnd object you want messages sent to.
  94. m_wndMenuListBox.SetOwner(this);
  95. //  m_wndMenuListBox.SetColors(RGB(0xff,0xff,0xff), RGB(0x3a,0x6e,0xa5));
  96. // Add items to the Outlook Bar control.
  97. m_wndMenuListBox.AddMenuItem(IDI_ICON_OUTLOOK,  _T("Outlook Today")),
  98. m_wndMenuListBox.AddMenuItem(IDI_ICON_CONTACTS, _T("Contacts")     ),
  99. m_wndMenuListBox.AddMenuItem(IDI_ICON_TASKS,    _T("Tasks")        ),
  100. m_wndMenuListBox.AddMenuItem(IDI_ICON_JOURNAL,  _T("Journal")      ),
  101. m_wndMenuListBox.AddMenuItem(IDI_ICON_NOTES,    _T("Notes")        ),
  102. m_wndMenuListBox.AddMenuItem(IDI_ICON_DELETED,  _T("Deleted Items")),
  103. m_wndMenuListBox.AddMenuItem(IDI_ICON_PUBLIC,   _T("Public")       ),
  104. m_wndMenuListBox.AddMenuItem(IDI_ICON_DRAFTS,   _T("Drafts")       ),
  105. m_wndMenuListBox.AddMenuItem(IDI_ICON_OUTBOX,   _T("Outbox")       ),
  106. m_wndMenuListBox.AddMenuItem(IDI_ICON_SENT,     _T("Sent")         ),
  107. // Insert menu items at a specific index.
  108. m_wndMenuListBox.InsertMenuItem(1, IDI_ICON_INBOX,    _T("Inbox")   ),
  109. m_wndMenuListBox.InsertMenuItem(2, IDI_ICON_CALENDAR, _T("Calendar")),
  110. // Set the child HWND to COutlookBar, and button size to 15.
  111. m_wndPager.SetChild(m_wndMenuListBox.GetSafeHwnd());
  112. m_wndPager.SetButtonSize(15);
  113. m_wndMenuListBox.EnableMenuItem(2, FALSE);
  114. return 0;
  115. }
  116. void CMenuListBoxView::OnPagerCalcSize(NMHDR* pNMHDR, LRESULT* pResult)
  117. {
  118. NMPGCALCSIZE* pNMPGCalcSize = (NMPGCALCSIZE*)pNMHDR;
  119. switch(pNMPGCalcSize->dwFlag)
  120. {
  121. case PGF_CALCWIDTH:
  122. break;
  123. case PGF_CALCHEIGHT:
  124. pNMPGCalcSize->iHeight = m_wndMenuListBox.GetCount()
  125. *(::GetSystemMetrics(SM_CYICON)*2);
  126. break;
  127. }
  128. *pResult = 0;
  129. }
  130. void CMenuListBoxView::OnPagerScroll(NMHDR* pNMHDR, LRESULT* pResult)
  131. {
  132. NMPGSCROLL* pNMPGScroll = (NMPGSCROLL*)pNMHDR;
  133. UNREFERENCED_PARAMETER(pNMPGScroll);
  134. *pResult = 0;
  135. // TODO: Handle pager scroll notification
  136. }
  137. LRESULT CMenuListBoxView::OnOutbarNotify(WPARAM wParam, LPARAM lParam)
  138. {
  139. if ((int)wParam == -1) // -1 means no selection
  140. return 0;
  141. switch( lParam ) // control id.
  142. {
  143. case IDC_OUTBAR:
  144. {
  145. // Get the menu item.
  146. CXTMenuListBox::CONTENT_ITEM* pContentItems = m_wndMenuListBox.GetMenuItem((int)wParam);
  147. ASSERT(pContentItems);
  148. AfxMessageBox(pContentItems->m_strText);
  149. }
  150. break;
  151. }
  152. return 0;
  153. }
  154. BOOL CMenuListBoxView::PreCreateWindow(CREATESTRUCT& cs)
  155. {
  156. if (!CView::PreCreateWindow(cs))
  157. return FALSE;
  158. cs.style |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
  159. // TODO: Add your specialized code here and/or call the base class
  160. return TRUE;
  161. }