CQImageButton.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:3k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // CQImageButton.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "autoupdate.h"
  5. #include "CQImageButton.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CCQImageButton
  13. CCQImageButton::CCQImageButton()
  14. :m_csDisableBmpID(NULL)
  15. ,m_csFocusBmpID(NULL)
  16. ,m_csNormalBmpID(NULL)
  17. {
  18. }
  19. CCQImageButton::~CCQImageButton()
  20. {
  21. if(m_csDisableBmpID)
  22. {
  23. DeleteObject(m_csDisableBmpID);
  24. }
  25. if(m_csFocusBmpID)
  26. {
  27. DeleteObject(m_csFocusBmpID);
  28. }
  29. if(m_csNormalBmpID)
  30. {
  31. DeleteObject(m_csNormalBmpID);
  32. }
  33. }
  34. void CCQImageButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
  35. {
  36.  
  37. CDC* pDC;
  38. CRect rc;
  39. HBITMAP hBitmap =NULL;
  40. UINT state = lpDrawItemStruct->itemState;//按钮当前状态
  41. pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
  42.   rc.CopyRect(&lpDrawItemStruct->rcItem);
  43. if (state & ODS_DISABLED   )//按下
  44.   {
  45. hBitmap = m_csDisableBmpID;
  46. //用位图创建区域
  47. //BitmapToRgn(pDC, hBitmap, rgn);
  48.   }
  49.  
  50. if(state & ODS_FOCUS    )
  51. {
  52.   hBitmap = m_csFocusBmpID;
  53.         
  54. //用位图创建区域
  55. //BitmapToRgn(pDC, hBitmap, rgn);
  56.   }
  57. if(hBitmap == NULL)
  58. {
  59. hBitmap = m_csNormalBmpID;
  60. //用位图创建区域
  61. //BitmapToRgn(pDC, hBitmap, rgn);
  62. }
  63. if(hBitmap!=NULL)
  64. {
  65. CDC memDC;
  66. CBitmap bitmap, *pOldBmp;
  67. memDC.CreateCompatibleDC(pDC);
  68. bitmap.Attach(hBitmap);
  69. // bitmap.GetBitmap(&bm);
  70. pOldBmp = memDC.SelectObject(&bitmap);
  71. pDC->BitBlt(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top,
  72. &memDC, 0, 0, SRCCOPY);
  73. memDC.SelectObject(pOldBmp);
  74. //将区域设置为窗口
  75. bitmap.Detach();
  76. }
  77. //rgn.CreateEllipticRgn(0, 0, bm.bmWidth, bm.bmHeight);
  78. //SetWindowRgn((HRGN)rgn, TRUE);
  79. }
  80. void CCQImageButton::SetButtonBmp(UINT csDisableBmpID, UINT csNormalBmpID,UINT csFocusBmpID,HINSTANCE AppHandle)
  81. {
  82. LoadBitMapRes(m_csDisableBmpID,csDisableBmpID ,AppHandle);
  83.     LoadBitMapRes(m_csNormalBmpID,csNormalBmpID,AppHandle);
  84.     LoadBitMapRes(m_csFocusBmpID,csFocusBmpID,AppHandle);
  85. }
  86. BEGIN_MESSAGE_MAP(CCQImageButton, CButton)
  87. //{{AFX_MSG_MAP(CCQImageButton)
  88. ON_WM_MOUSEMOVE()
  89. //}}AFX_MSG_MAP
  90. END_MESSAGE_MAP()
  91. /////////////////////////////////////////////////////////////////////////////
  92. // CCQImageButton message handlers
  93. void CCQImageButton::OnMouseMove(UINT nFlags, CPoint point) 
  94. {
  95. // TODO: Add your message handler code here and/or call default
  96. CButton::OnMouseMove(nFlags, point);
  97. if(IsWindowEnabled())
  98. {
  99. CRect rect;
  100. GetWindowRect(&rect);
  101. ScreenToClient(&rect);
  102. if(rect.PtInRect(point))
  103. {
  104. SetCapture();
  105. SetFocus();
  106. Invalidate(FALSE);
  107. }
  108. else
  109. {
  110. ReleaseCapture();
  111. GetParent()->SetFocus();
  112. Invalidate(FALSE);
  113. }
  114. }
  115. }
  116. //DEL void CCQImageButton::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 
  117. //DEL {
  118. //DEL  CButton::OnActivate(nState, pWndOther, bMinimized);
  119. //DEL 
  120. //DEL  // TODO: Add your message handler code here
  121. //DEL 
  122. //DEL }
  123. void LoadBitMapRes(HBITMAP& BitMap, UINT BitMapRes,HINSTANCE AppHandle)
  124. {
  125. if(BitMap)
  126. {
  127. if(!DeleteObject(BitMap))
  128. {
  129. DisplayErrorInfo(string("DeleteObject"));
  130. }
  131. }
  132.   if(!(BitMap   = LoadBitmap(AppHandle,MAKEINTRESOURCE(BitMapRes))))
  133. {
  134. DisplayErrorInfo(string("LoadBitmap"));
  135. }
  136. }