GuiImageLinkButton.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:4k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. //-----------------------------------------------------------------------//
  2. // This is a part of the GuiLib MFC Extention.  //
  3. // Autor  :  Francisco Campos  //
  4. // (C) 2002 Francisco Campos <www.beyondata.com> All rights reserved     //
  5. // This code is provided "as is", with absolutely no warranty expressed  //
  6. // or implied. Any use is at your own risk.  //
  7. // You must obtain the author's consent before you can include this code //
  8. // in a software library.  //
  9. // If the source code in  this file is used in any application  //
  10. // then acknowledgement must be made to the author of this program  //
  11. // fcampos@tutopia.com  //
  12. //-----------------------------------------------------------------------//
  13. #include "stdafx.h"
  14. #include "guiimagelinkbutton.h"
  15. #include "resource.h"
  16. IMPLEMENT_DYNAMIC(CGuiImageLinkButton,CGuiToolButton)
  17. CGuiImageLinkButton::CGuiImageLinkButton(void)
  18. {
  19. m_cfontSelect.CreateFont(14,0,0,0,400,0,1,0,0,1,2,1,34,"Arial");
  20. m_cfontNormal.CreateFont(14,0,0,0,400,0,0,0,0,1,2,1,34,"Arial");
  21. rectletra=CRect(0,0,0,0);
  22. m_iDent=0;
  23. }
  24. CGuiImageLinkButton::~CGuiImageLinkButton(void)
  25. {
  26. }
  27. BEGIN_MESSAGE_MAP(CGuiImageLinkButton, CGuiToolButton)
  28. ON_WM_SETCURSOR()
  29. ON_WM_MOUSEMOVE()
  30. END_MESSAGE_MAP()
  31. void CGuiImageLinkButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
  32. {
  33. CDC*  pdc= CDC::FromHandle(lpDrawItemStruct->hDC);
  34. CRect rc=lpDrawItemStruct->rcItem;
  35. UINT  uState=lpDrawItemStruct->itemState;
  36. CFont* m_OldFont;
  37. CBrush cb;
  38. int calculodify;
  39. cb.CreateSolidBrush(m_clColor); //deberia ser blanco
  40. if (m_bMouserOver)
  41. m_OldFont=pdc->SelectObject(&m_cfontSelect);
  42. else
  43. m_OldFont=pdc->SelectObject(&m_cfontNormal);
  44. pdc->FillRect(rc,&cb);
  45. calculodify=rc.Height()-(m_SizeImage.cy);
  46. calculodify/=2;
  47. CPoint m_point=CPoint(12,calculodify+1);
  48. rc.left+=8; //identar a la derecha
  49. if (m_SizeImage.cx > 2)
  50. {
  51. pdc->DrawState (m_point, m_SizeImage,m_Icon,
  52. (uState==ODS_DISABLED?DSS_DISABLED:DSS_NORMAL),(CBrush*)NULL);
  53. }
  54. if (m_SizeText.cx > 2)
  55. {
  56. int nMode = pdc->SetBkMode(TRANSPARENT);
  57. COLORREF clOldColor=pdc->SetTextColor(RGB(0,0,200));
  58. rectletra=rc;
  59. rectletra.left+=m_iDent+m_SizeImage.cx+8;
  60. CPoint pt=CSize(rectletra.top,rectletra.left);
  61. if (uState & ODS_DISABLED)
  62. pdc->DrawState(pt, m_SizeText, m_szText, DSS_DISABLED, TRUE, 0, (CBrush*)NULL);
  63. else
  64. pdc->DrawText(m_szText,rectletra,DT_SINGLELINE|DT_LEFT|DT_BOTTOM);
  65. pdc->SetBkMode(nMode);
  66. pdc->SetTextColor(clOldColor);
  67. }
  68. pdc->SelectObject(m_OldFont);
  69. // TODO:  Add your code to draw the specified item
  70. }
  71. BOOL CGuiImageLinkButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
  72. {
  73. // TODO: Add your message handler code here and/or call default
  74. // ::SetCursor(::LoadCursor(NULL,IDC_HAND));
  75. return TRUE;
  76. //return CGuiToolButton::OnSetCursor(pWnd, nHitTest, message);
  77. }
  78. void CGuiImageLinkButton::OnMouseMove(UINT nFlags, CPoint point)
  79. {
  80. // TODO: Add your message handler code here and/or call default
  81. //la idea es que solo se muestre el cursor hand si se esta sobre la imagen
  82. //o sobre la cadena
  83. CRect m_rect;
  84. GetClientRect(&m_rect);
  85. rectletra.left=m_rect.left+4;
  86. if (m_bMouserOver) return;
  87. if (rectletra.PtInRect(point))
  88. ::SetCursor(::LoadCursor(NULL,MAKEINTRESOURCE(32649)));//IDC_HAND));
  89. else
  90. ::SetCursor(::LoadCursor(NULL,IDC_ARROW));
  91. CGuiToolButton::OnMouseMove(nFlags, point);
  92. }
  93. //********************************************************************************
  94. BEGIN_MESSAGE_MAP(CGuiScrollButton, CGuiToolButton)
  95. ON_WM_MOUSEMOVE()
  96. ON_WM_TIMER()
  97. END_MESSAGE_MAP()
  98. CGuiScrollButton::CGuiScrollButton(void)
  99. {
  100. }
  101. CGuiScrollButton::~CGuiScrollButton(void)
  102. {
  103. }
  104. void CGuiScrollButton::OnMouseMove(UINT nFlags, CPoint point)
  105. {
  106. // TODO: Add your message handler code here and/or call default
  107. CGuiToolButton::OnMouseMove(nFlags, point);
  108. if (m_bMouserOvernew) 
  109. {
  110. SetTimer(2,20,0);
  111. }
  112. }
  113. void CGuiScrollButton::OnTimer(UINT nIDEvent)
  114. {
  115. // TODO: Add your message handler code here and/or call default
  116. CGuiToolButton::OnTimer(nIDEvent);
  117. // if (!m_bMouserOvernew) return;
  118. CRect rc;
  119. CPoint pt(GetMessagePos());
  120. ScreenToClient(&pt);
  121. GetClientRect(rc);
  122. if (rc.PtInRect(pt))
  123. {
  124. CWnd* pParent=GetParent();
  125. pParent->SendMessage(WM_COMMAND,GetDlgCtrlID());
  126. }
  127. CButton::OnTimer(nIDEvent);
  128. }