OrderListUI.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #pragma once
  2. inline double CalculateDelay(double state) {
  3. return pow(state, 2);
  4. }
  5. class OrderListUI : public CTileLayoutUI
  6. {
  7. public:
  8. enum { SCROLL_TIMERID = 10 };
  9. OrderListUI() : m_uButtonState(0), m_dwDelayDeltaY(0), m_dwDelayNum(0), m_dwDelayLeft(0)
  10. {
  11. SetItemSize(CSize(1000, 200));
  12. }
  13. //刷新
  14. void Refresh();
  15. void DoEvent(TEventUI& event)
  16. {
  17. if (!IsMouseEnabled() && event.Type > UIEVENT__MOUSEBEGIN && event.Type < UIEVENT__MOUSEEND) {
  18. if (m_pParent != NULL) m_pParent->DoEvent(event);
  19. else CTileLayoutUI::DoEvent(event);
  20. return;
  21. }
  22. if (event.Type == UIEVENT_TIMER && event.wParam == SCROLL_TIMERID)
  23. {
  24. if ((m_uButtonState & UISTATE_CAPTURED) != 0) {
  25. POINT pt = m_pManager->GetMousePos();
  26. LONG cy = (pt.y - m_ptLastMouse.y);
  27. m_ptLastMouse = pt;
  28. SIZE sz = GetScrollPos();
  29. sz.cy -= cy;
  30. SetScrollPos(sz);
  31. return;
  32. }
  33. else if (m_dwDelayLeft > 0) {
  34. --m_dwDelayLeft;
  35. SIZE sz = GetScrollPos();
  36. LONG lDeltaY = (LONG)(CalculateDelay((double)m_dwDelayLeft / m_dwDelayNum) * m_dwDelayDeltaY);
  37. if ((lDeltaY > 0 && sz.cy != 0) || (lDeltaY < 0 && sz.cy != GetScrollRange().cy)) {
  38. sz.cy -= lDeltaY;
  39. SetScrollPos(sz);
  40. return;
  41. }
  42. }
  43. m_dwDelayDeltaY = 0;
  44. m_dwDelayNum = 0;
  45. m_dwDelayLeft = 0;
  46. m_pManager->KillTimer(this, SCROLL_TIMERID);
  47. return;
  48. }
  49. if (event.Type == UIEVENT_BUTTONDOWN && IsEnabled())
  50. {
  51. m_uButtonState |= UISTATE_CAPTURED;
  52. m_ptLastMouse = event.ptMouse;
  53. m_dwDelayDeltaY = 0;
  54. m_dwDelayNum = 0;
  55. m_dwDelayLeft = 0;
  56. ::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_HAND)));
  57. m_pManager->SetTimer(this, SCROLL_TIMERID, 50U);
  58. return;
  59. }
  60. if (event.Type == UIEVENT_BUTTONUP)
  61. {
  62. if ((m_uButtonState & UISTATE_CAPTURED) != 0) {
  63. m_uButtonState &= ~UISTATE_CAPTURED;
  64. ::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)));
  65. if (m_ptLastMouse.y != event.ptMouse.y) {
  66. m_dwDelayDeltaY = (event.ptMouse.y - m_ptLastMouse.y);
  67. if (m_dwDelayDeltaY > 120) m_dwDelayDeltaY = 120;
  68. else if (m_dwDelayDeltaY < -120) m_dwDelayDeltaY = -120;
  69. m_dwDelayNum = (DWORD)sqrt((double)abs(m_dwDelayDeltaY)) * 5;
  70. m_dwDelayLeft = m_dwDelayNum;
  71. }
  72. else
  73. m_pManager->KillTimer(this, SCROLL_TIMERID);
  74. }
  75. return;
  76. }
  77. if (event.Type == UIEVENT_SCROLLWHEEL)
  78. {
  79. LONG lDeltaY = 0;
  80. if (m_dwDelayNum > 0) lDeltaY = (LONG)(CalculateDelay((double)m_dwDelayLeft / m_dwDelayNum) * m_dwDelayDeltaY);
  81. switch (LOWORD(event.wParam)) {
  82. case SB_LINEUP:
  83. if (m_dwDelayDeltaY >= 0) m_dwDelayDeltaY = lDeltaY + 8;
  84. else m_dwDelayDeltaY = lDeltaY + 12;
  85. break;
  86. case SB_LINEDOWN:
  87. if (m_dwDelayDeltaY <= 0) m_dwDelayDeltaY = lDeltaY - 8;
  88. else m_dwDelayDeltaY = lDeltaY - 12;
  89. break;
  90. }
  91. if (m_dwDelayDeltaY > 100) m_dwDelayDeltaY = 100;
  92. else if (m_dwDelayDeltaY < -100) m_dwDelayDeltaY = -100;
  93. m_dwDelayNum = (DWORD)sqrt((double)abs(m_dwDelayDeltaY)) * 5;
  94. m_dwDelayLeft = m_dwDelayNum;
  95. m_pManager->SetTimer(this, SCROLL_TIMERID, 50U);
  96. return;
  97. }
  98. CTileLayoutUI::DoEvent(event);
  99. }
  100. private:
  101. UINT m_uButtonState;
  102. POINT m_ptLastMouse;
  103. LONG m_dwDelayDeltaY;
  104. DWORD m_dwDelayNum;
  105. DWORD m_dwDelayLeft;
  106. int m_status = 1; //1:未处理 2:已确认 3:配送中 4:成功 5:失败 6:退款中
  107. };