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

CA认证

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. // 预处理
  3. #include "CXPBase.h"
  4. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  5. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  6. // 绘制组合框
  7. VOID CXPDrawComboBox(PCCLASSXP pCxp)
  8. {
  9. UINT i;
  10. HDC hDC;
  11. RECT rtRect;
  12. PBYTE pbDib;
  13. BITMAPINFOHEADER biCmb;
  14. // 开始绘制
  15. _CXPBeginDraw(hDC, FALSE, TRUE);
  16. if (_CXPGetState(CXPS_SIMPLECMB))
  17. {
  18. rtRect.bottom = GetSystemMetrics(SM_CYVTHUMB) + 3;
  19. }
  20. // 绘制边框
  21. _FrameRect(_CXPGetState(CXPS_DISABLED) ? CXPR_DFRAME : CXPR_FRAME);
  22. InflateRect(&rtRect, -1, -1);
  23. _FrameRect(_CXPGetState(CXPS_DISABLED) ? CXPR_DWINDOW : CXPR_WINDOW);
  24. if (!_CXPGetState(CXPS_SIMPLECMB))
  25. {
  26. // 选择图像
  27. if (_CXPGetState(CXPS_DISABLED))
  28. {
  29. i = 0;
  30. }
  31. else if (_CXPGetState(CXPS_PRESSED))
  32. {
  33. i = 1;
  34. }
  35. else if (_CXPGetState(CXPS_HOTLIGHT))
  36. {
  37. i = 2;
  38. }
  39. else
  40. {
  41. i = 3;
  42. }
  43. // 清除下拉按钮
  44. rtRect.left = rtRect.right - GetSystemMetrics(SM_CXHTHUMB) - 1;
  45. _FillRect(_CXPGetState(CXPS_DISABLED) ? CXPR_CANVAS : GetSysColor(COLOR_WINDOW))
  46. // 绘制图象
  47. biCmb = c_biCXPCheck;
  48. biCmb.biWidth = CXPW_CMB;
  49. biCmb.biHeight = rtRect.bottom - 3;
  50. biCmb.biSizeImage = biCmb.biWidth * biCmb.biHeight * 4;
  51. pbDib = (PBYTE) _HeapAlloc(biCmb.biSizeImage);
  52. if (pbDib)
  53. {
  54. CXPDibBlendVertExt((PBYTE) pbDib, biCmb.biHeight, (PBYTE) c_crCXPComboBox[i], CXPW_CMB, CXPH_CMB);
  55. _DrawDIB(rtRect.right - biCmb.biWidth - 1, 2, biCmb.biWidth, biCmb.biHeight, pbDib, &biCmb);
  56. _HeapFree(pbDib);
  57. }
  58. // 绘制箭头
  59. i = _CXPGetState(CXPS_DISABLED) ? CXPR_DARROW : CXPR_ARROW;
  60. CXPDrawArrow(hDC, (rtRect.right - (biCmb.biWidth / 2) - 2), rtRect.bottom / 2, CXPA_LARGEDOWN, i);
  61. }
  62. // 结束绘制
  63. _CXPEndDraw(hDC);
  64. }
  65. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////