中间件标准版5.1git,去除基础模块

CfgDialog.cpp 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. // CfgDialog.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "FirstStep.h"
  5. #include "CfgDialog.h"
  6. #include "afxdialogex.h"
  7. // CCfgDialog 对话框
  8. IMPLEMENT_DYNAMIC(CCfgDialog, CDialogEx)
  9. CCfgDialog::CCfgDialog(UINT Page, UINT IDTemplate, CWnd* pParent /*=NULL*/)
  10. : CDialogEx(IDTemplate, pParent), m_Page(Page), m_MaxPos(0), m_PrevPos(1)
  11. {
  12. }
  13. CCfgDialog::~CCfgDialog()
  14. {
  15. }
  16. void CCfgDialog::DoDataExchange(CDataExchange* pDX)
  17. {
  18. CDialogEx::DoDataExchange(pDX);
  19. }
  20. /*****************************************************************
  21. **【函数名称】 __getScrollPos
  22. **【函数功能】 计算页面滚动范围
  23. **【参数】
  24. **【返回值】
  25. ****************************************************************/
  26. int CCfgDialog::_getScrollPos( int Bar, UINT SBCode )
  27. {
  28. SCROLLINFO si;
  29. si.cbSize = sizeof(SCROLLINFO);
  30. si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE | SIF_TRACKPOS;
  31. GetScrollInfo(Bar, &si);
  32. const int minPos = si.nMin;
  33. const int maxPos = si.nMax - (si.nPage - 1);
  34. int result = -1;
  35. switch(SBCode)
  36. {
  37. case SB_LINEUP /*SB_LINELEFT*/:
  38. result = max(si.nPos - 1, minPos);
  39. break;
  40. case SB_LINEDOWN /*SB_LINERIGHT*/:
  41. result = min(si.nPos + 1, maxPos);
  42. break;
  43. case SB_PAGEUP /*SB_PAGELEFT*/:
  44. result = max(si.nPos - (int)si.nPage, minPos);
  45. break;
  46. case SB_PAGEDOWN /*SB_PAGERIGHT*/:
  47. result = min(si.nPos + (int)si.nPage, maxPos);
  48. break;
  49. case SB_THUMBPOSITION:
  50. // do nothing
  51. break;
  52. case SB_THUMBTRACK:
  53. result = si.nTrackPos;
  54. break;
  55. case SB_TOP /*SB_LEFT*/:
  56. result = minPos;
  57. break;
  58. case SB_BOTTOM /*SB_RIGHT*/:
  59. result = maxPos;
  60. break;
  61. case SB_ENDSCROLL:
  62. // do nothing
  63. break;
  64. }
  65. return result;
  66. }
  67. /*****************************************************************
  68. **【函数名称】 __scrollClient
  69. **【函数功能】 滚动页面
  70. **【参数】
  71. **【返回值】
  72. ****************************************************************/
  73. void CCfgDialog::_scrollClient( int Bar, int Pos )
  74. {
  75. int cy = 0;
  76. cy = m_PrevPos - Pos;
  77. m_PrevPos = Pos;
  78. if(cy)
  79. {
  80. ScrollWindow(0, cy, NULL, NULL);
  81. }
  82. }
  83. /*****************************************************************
  84. **【函数名称】 __vScrool
  85. **【函数功能】 垂直滚动页面
  86. **【参数】
  87. **【返回值】
  88. ****************************************************************/
  89. void CCfgDialog::_vScrool( int Bar, UINT SBCode, bool IsMouseWheel, bool IsUp )
  90. {
  91. int scrollPos = _getScrollPos(Bar, SBCode);
  92. if(scrollPos == -1)
  93. return;
  94. if(IsMouseWheel)
  95. {
  96. if(IsUp)
  97. {
  98. scrollPos -= 25;
  99. scrollPos = (scrollPos < 1) ? 1 : scrollPos;
  100. }
  101. else
  102. {
  103. scrollPos += 25;
  104. scrollPos = (scrollPos > m_MaxPos) ? m_MaxPos : scrollPos;
  105. }
  106. }
  107. SetScrollPos(Bar, scrollPos, TRUE);
  108. _scrollClient(Bar, scrollPos);
  109. }
  110. BEGIN_MESSAGE_MAP(CCfgDialog, CDialogEx)
  111. ON_WM_VSCROLL()
  112. ON_WM_MOUSEWHEEL()
  113. END_MESSAGE_MAP()
  114. // CCfgDialog 消息处理程序
  115. BOOL CCfgDialog::OnInitDialog()
  116. {
  117. CDialogEx::OnInitDialog();
  118. // TODO: 在此添加额外的初始化
  119. CRect rc;
  120. GetClientRect(&rc);
  121. const SIZE sz = { rc.right - rc.left, rc.bottom - rc.top };
  122. SCROLLINFO si;
  123. si.cbSize = sizeof(SCROLLINFO);
  124. si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE;
  125. si.nPos = si.nMin = 1;
  126. si.nMax = sz.cy * m_Page;
  127. si.nPage = sz.cy;
  128. m_MaxPos = sz.cy;
  129. SetScrollInfo(SB_VERT, &si, FALSE); //此函数将产生一个垂直滚动条
  130. return TRUE; // return TRUE unless you set the focus to a control
  131. // 异常: OCX 属性页应返回 FALSE
  132. }
  133. void CCfgDialog::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  134. {
  135. // TODO: 在此添加消息处理程序代码和/或调用默认值
  136. _vScrool(SB_VERT, nSBCode, false, false);
  137. CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
  138. }
  139. BOOL CCfgDialog::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
  140. {
  141. // TODO: 在此添加消息处理程序代码和/或调用默认值
  142. if(zDelta < 0)
  143. _vScrool(SB_VERT, SB_LINEDOWN, true, false);
  144. else
  145. _vScrool(SB_VERT, SB_LINEUP, true, true);
  146. return CDialogEx::OnMouseWheel(nFlags, zDelta, pt);
  147. }