CXPSpinBox.c
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:3k
源码类别:

CA认证

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. // 预处理
  3. #include "CXPBase.h"
  4. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  5. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  6. // 绘制旋转控件
  7. VOID CXPDrawSpinBox(PCCLASSXP pCxp)
  8. {
  9. UINT x;
  10. UINT y;
  11. UINT i;
  12. UINT j;
  13. HDC hDC;
  14. RECT rtRect;
  15. PBYTE pbDib;
  16. BITMAPINFOHEADER biCmb;
  17. // 开始绘制
  18. _CXPBeginDraw(hDC, FALSE, TRUE);
  19. // 绘制外框
  20. if (pCxp->lParam)
  21. {
  22. _FrameRect(_CXPGetState(CXPS_DISABLED) ? CXPR_DFRAME : CXPR_FRAME);
  23. InflateRect(&rtRect, -1, -1);
  24. x = (_CXPGetState(CXPS_LEFTSPIN)) ? rtRect.right : 0;
  25. i = (((PCLASSXP) pCxp->lParam)->lState & (CXPS_DISABLED | CXPS_READONLY)) ? CXPR_DWINDOW : CXPR_WINDOW;
  26. _DrawLine(x, rtRect.top, x, rtRect.bottom, i);
  27. }
  28. // 绘制内框
  29. _FillRect(GetSysColor(COLOR_WINDOW));
  30. InflateRect(&rtRect, -1, -1);
  31. // 选择图像
  32. if (_CXPGetState(CXPS_DISABLED))
  33. {
  34. i = 0;
  35. j = 0;
  36. }
  37. else
  38. {
  39. if (_CXPGetState(CXPS_PRESSED))
  40. {
  41. i = 1;
  42. }
  43. else if (_CXPGetState(CXPS_HOTLIGHT))
  44. {
  45. i = 2;
  46. }
  47. else
  48. {
  49. i = 3;
  50. }
  51. if (_CXPGetState(CXPS_FIRSTPART))
  52. {
  53. j = 3;
  54. }
  55. else
  56. {
  57. j = i;
  58. i = 3;
  59. }
  60. }
  61. // 绘制图象
  62. biCmb = c_biCXPCheck;
  63. if (_CXPGetState(CXPS_HORIZON))
  64. {
  65. x = _RectWidth(rtRect);
  66. biCmb.biWidth = x / 2;
  67. biCmb.biHeight = _RectHeight(rtRect);
  68. x = rtRect.left + biCmb.biWidth + (x & 1);
  69. y = rtRect.top;
  70. }
  71. else
  72. {
  73. y = _RectHeight(rtRect);
  74. biCmb.biWidth = _RectWidth(rtRect);
  75. biCmb.biHeight = y / 2;
  76. x = rtRect.left;
  77. y = rtRect.top + biCmb.biHeight + (y & 1);
  78. }
  79. biCmb.biSizeImage = biCmb.biWidth * biCmb.biHeight * 4;
  80. pbDib = (PBYTE) _HeapAlloc(biCmb.biSizeImage);
  81. if (pbDib)
  82. {
  83. CXPDibBlendExt((PBYTE) pbDib, biCmb.biWidth, biCmb.biHeight, (PBYTE) c_crCXPComboBox[i], CXPW_CMB, CXPH_CMB);
  84. _DrawDIB(rtRect.left, rtRect.top, biCmb.biWidth, biCmb.biHeight, pbDib, &biCmb);
  85. CXPDibBlendExt((PBYTE) pbDib, biCmb.biWidth, biCmb.biHeight, (PBYTE) c_crCXPComboBox[j], CXPW_CMB, CXPH_CMB);
  86. _DrawDIB(x, y, biCmb.biWidth, biCmb.biHeight, pbDib, &biCmb);
  87. _HeapFree(pbDib);
  88. }
  89. // 绘制箭头
  90. i = _CXPGetState(CXPS_DISABLED) ? CXPR_DARROW : CXPR_ARROW;
  91. x = rtRect.left + (biCmb.biWidth / 2);
  92. y = rtRect.top + (biCmb.biHeight / 2);
  93. if (_CXPGetState(CXPS_HORIZON))
  94. {
  95. CXPDrawArrow(hDC, x, y, CXPA_SMALLLEFT, i);
  96. x += biCmb.biWidth;
  97. CXPDrawArrow(hDC, x, y, CXPA_SMALLRIGHT, i);
  98. }
  99. else
  100. {
  101. CXPDrawArrow(hDC, x, y, CXPA_SMALLUP, i);
  102. y += biCmb.biHeight;
  103. CXPDrawArrow(hDC, x, y, CXPA_SMALLDOWN, i);
  104. }
  105. // 结束绘制
  106. _CXPEndDraw(hDC);
  107. }
  108. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////