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

CA认证

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. // 预处理
  3. #include "CXPBase.h"
  4. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  5. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  6. // 绘制按钮
  7. VOID CXPDrawPushButton(PCCLASSXP pCxp)
  8. {
  9. UINT i;
  10. HDC hDC;
  11. RECT rtRect;
  12. PBYTE pbDib;
  13. TCHAR tzText[256];
  14. BITMAPINFOHEADER biBtn;
  15. // 开始绘制
  16. _CXPBeginDraw(hDC, FALSE, FALSE);
  17. // 选择图像
  18. if (_CXPGetState(CXPS_DISABLED))
  19. {
  20. i = 1;
  21. }
  22. else if (_CXPGetState(CXPS_PRESSED | CXPS_CHECKED | CXPS_INDETERMINATE))
  23. {
  24. i = 2;
  25. }
  26. else if (_CXPGetState(CXPS_HOTLIGHT))
  27. {
  28. i = 3;
  29. }
  30. else if (_CXPGetState(CXPS_FOCUS | CXPS_DEFAULT))
  31. {
  32. i = 0;
  33. }
  34. else
  35. {
  36. i = 4;
  37. }
  38. // 绘制图像
  39. biBtn = c_biCXPCheck;
  40. biBtn.biWidth = rtRect.right;
  41. biBtn.biHeight = rtRect.bottom;
  42. biBtn.biSizeImage = rtRect.right * rtRect.bottom * 4;
  43. pbDib = (PBYTE) _HeapAlloc(biBtn.biSizeImage);
  44. if (pbDib)
  45. {
  46. CXPDibBlendExt((PBYTE) pbDib, rtRect.right, rtRect.bottom, (PBYTE) c_crCXPPushButton[i], CXPW_BTN, CXPH_BTN);
  47. _DrawDIB(0, 0, rtRect.right, rtRect.bottom, pbDib, &biBtn);
  48. _HeapFree(pbDib);
  49. }
  50. // 绘制焦点框
  51. InflateRect(&rtRect, -3, -3);
  52. if (_CXPGetState(CXPS_FOCUS))
  53. {
  54. DrawFocusRect(hDC, &rtRect);
  55. }
  56. // 绘制文字
  57. if (GetWindowText(pCxp->hWnd, tzText, sizeof(tzText)))
  58. {
  59. i = _CXPGetStyle(BS_MULTILINE) ? (DT_WORDBREAK | DT_EDITCONTROL) : (DT_WORDBREAK | DT_EDITCONTROL | DT_SINGLELINE);
  60. i |= _TriIf(_CXPGetStyle(BS_LEFT), _CXPGetStyle(BS_RIGHT), DT_LEFT, DT_RIGHT, DT_CENTER);
  61. i |= _TriIf(_CXPGetStyle(BS_TOP), _CXPGetStyle(BS_BOTTOM), DT_TOP, DT_BOTTOM, DT_VCENTER);
  62. _ExIf(_CXPGetState(CXPS_PRESSED), OffsetRect(&rtRect, 1, 1));
  63. _DrawText(tzText, _CXPGetState(CXPS_INDETERMINATE | CXPS_DISABLED) ? CXPR_DTEXT: CXPR_TEXT, i);
  64. }
  65. // 结束绘制
  66. _CXPEndDraw(hDC);
  67. }
  68. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  69. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  70. // 绘制选框
  71. VOID CXPDrawCheckBox(PCCLASSXP pCxp)
  72. {
  73. UINT i;
  74. HDC hDC;
  75. RECT rtRect;
  76. PBYTE pbDib;
  77. TCHAR tzText[256];
  78. COLORREF crDib[CXPW_CHK * CXPH_CHK];
  79. // 开始绘制
  80. _CXPBeginDraw(hDC, TRUE, FALSE);
  81. // 选择图像
  82. if (_CXPGetState(CXPS_DISABLED))
  83. {
  84. i = 0;
  85. }
  86. else if (_CXPGetState(CXPS_PRESSED))
  87. {
  88. i = 1;
  89. }
  90. else if (_CXPGetState(CXPS_HOTLIGHT))
  91. {
  92. i = 2;
  93. }
  94. else
  95. {
  96. i = 3;
  97. }
  98. _ExIf(_CXPGetState(CXPS_CHECKED), i += 4);
  99. if ((_CXPGetStyle(BS_TYPEMASK) == BS_RADIOBUTTON) || (_CXPGetStyle(BS_TYPEMASK) == BS_AUTORADIOBUTTON))
  100. {
  101. pbDib = (PBYTE) crDib;
  102. CXPDibBlend(pbDib, (PBYTE) c_crCXPRadioBox[i], CXPW_CHK * CXPH_CHK);
  103. }
  104. else
  105. {
  106. _ExIf(_CXPGetState(CXPS_INDETERMINATE), i += 8);
  107. pbDib = (PBYTE) c_crCXPCheckBox[i];
  108. }
  109. // 绘制图象
  110. _DrawDIB(0, (rtRect.bottom - CXPH_CHK) / 2, CXPW_CHK, CXPH_CHK, pbDib, &c_biCXPCheck);
  111. // 绘制文字
  112. if (GetWindowText(pCxp->hWnd, tzText, sizeof(tzText)))
  113. {
  114. rtRect.left = (CXPW_CHK + 5);
  115. _DrawFocusText(tzText, _CXPGetState(CXPS_DISABLED) ? CXPR_DTEXT: CXPR_TEXT);
  116. }
  117. // 结束绘制
  118. _CXPEndDraw(hDC);
  119. }
  120. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////