IEButton.cpp
上传用户:szcysw
上传日期:2013-03-11
资源大小:6752k
文件大小:2k
源码类别:

界面编程

开发平台:

Visual C++

  1. // IEButton.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "IEButtonDemo.h"
  5. #include "IEButton.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CIEButton
  13. CIEButton::CIEButton()
  14. {
  15. //初始化按钮状态:鼠标未移入按钮
  16. IsMouseOn=FALSE;
  17. }
  18. CIEButton::~CIEButton()
  19. {
  20. }
  21. BEGIN_MESSAGE_MAP(CIEButton, CButton)
  22. //{{AFX_MSG_MAP(CIEButton)
  23. ON_WM_MOUSEMOVE()
  24. ON_CONTROL_REFLECT(BN_CLICKED, OnClicked)
  25. //}}AFX_MSG_MAP
  26. END_MESSAGE_MAP()
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CIEButton message handlers
  29. void CIEButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
  30. {
  31. // TODO: Add your code to draw the specified item
  32. CDC ButtonDC;
  33. CBitmap bitmapTrans;
  34. BITMAP bmp;
  35. CDC mem;
  36. CRect rc,rc2;
  37. //得到用于绘制按钮的DC
  38. ButtonDC.Attach( lpDrawItemStruct->hDC );
  39. //准备用于向按钮区域传输位图
  40. mem.CreateCompatibleDC(&ButtonDC);
  41. //获取按钮所占的矩形大小
  42. rc=lpDrawItemStruct->rcItem;
  43. rc2=rc;
  44. //在任何状态下,图片是首先要绘绘制的
  45. bitmapTrans.LoadBitmap(IDB_IE);
  46. bitmapTrans.GetBitmap(&bmp);
  47. CBitmap *old=mem.SelectObject(&bitmapTrans);
  48. int x,y;
  49. x=rc.Width()/2-bmp.bmWidth/2;
  50. y=rc.Height()/2-bmp.bmHeight/2;
  51. //向按钮中心点传输位图
  52. ButtonDC.BitBlt(x,y,rc.right,rc.bottom,&mem, 0, 0, SRCCOPY);
  53. mem.SelectObject(old);
  54. //获取按钮目前所处的状态,根据不同的状态绘制不同的按钮
  55. //如果鼠标移入按钮,绘制浮起状态
  56. if (IsMouseOn )
  57.     {
  58. //为按钮绘制立体效果
  59. rc.top=rc.top+1;rc.bottom=rc.bottom-1;
  60. rc.left=rc.left+1;rc.right=rc.right-1;
  61. //绘制立体边框
  62. ButtonDC.Draw3dRect(&rc,RGB(255,255,255),RGB(0,0,0));
  63. }
  64. //如果按钮被按下,绘制下沉立体效果
  65. if(lpDrawItemStruct->itemAction &ODA_SELECT)
  66. {
  67. rc2.top=rc2.top+1;rc2.bottom=rc2.bottom-1;
  68. rc2.left=rc2.left+1;rc2.right=rc2.right-1;
  69. //绘制立体边框
  70. ButtonDC.Draw3dRect(&rc2,RGB(0,0,0),RGB(255,255,255));
  71. }
  72. }
  73. void CIEButton::OnMouseMove(UINT nFlags, CPoint point) 
  74. {
  75. //如果鼠标移入按钮
  76. if(!IsMouseOn)
  77. {
  78. this->IsMouseOn=TRUE;
  79. //重绘整个控件
  80. this->Invalidate();
  81. }
  82. CButton::OnMouseMove(nFlags, point);
  83. }
  84. void CIEButton::OnClicked() 
  85. {
  86. AfxMessageBox("测试信息");
  87. }