GuiImageLinkButton.cpp
上传用户:wlkj888
上传日期:2022-08-01
资源大小:806k
文件大小:5k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. /****************************************************************************
  2.  * *  
  3.  * GuiToolKit   *
  4.  *  (MFC extension) *  
  5.  * Created by Francisco Campos G. www.beyondata.com fcampos@beyondata.com *
  6.  *--------------------------------------------------------------------------*    
  7.  * *
  8.  * This program is free software;so you are free to use it any of your *
  9.  * applications (Freeware, Shareware, Commercial),but leave this header *
  10.  * intact. *
  11.  * *
  12.  * These files are provided "as is" without warranty of any kind. *
  13.  * *
  14.  *        GuiToolKit is forever FREE CODE !!!!! *
  15.  * *
  16.  *--------------------------------------------------------------------------*
  17.  * Created by: Francisco Campos G. *
  18.  * Bug Fixes and improvements : (Add your name) *
  19.  * -Francisco Campos *
  20.  * *
  21.  ****************************************************************************/
  22. #include "stdafx.h"
  23. #include "guiimagelinkbutton.h"
  24. #ifdef _DEBUG
  25. #undef THIS_FILE
  26. static char THIS_FILE[]=__FILE__;
  27. #define new DEBUG_NEW
  28. #endif
  29. IMPLEMENT_DYNAMIC(CGuiImageLinkButton,CGuiToolButton)
  30. CGuiImageLinkButton::CGuiImageLinkButton(void)
  31. {
  32. m_cfontSelect.CreateFont(14,0,0,0,400,0,1,0,0,1,2,1,34,_T("Arial"));
  33. m_cfontNormal.CreateFont(14,0,0,0,400,0,0,0,0,1,2,1,34,_T("Arial"));
  34. rectletra=CRect(0,0,0,0);
  35. m_iDent=0;
  36. }
  37. CGuiImageLinkButton::~CGuiImageLinkButton(void)
  38. {
  39. }
  40. BEGIN_MESSAGE_MAP(CGuiImageLinkButton, CGuiToolButton)
  41. ON_WM_SETCURSOR()
  42. ON_WM_MOUSEMOVE()
  43. END_MESSAGE_MAP()
  44. void CGuiImageLinkButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
  45. {
  46. CDC*  pdc= CDC::FromHandle(lpDrawItemStruct->hDC);
  47. CRect rc=lpDrawItemStruct->rcItem;
  48. UINT  uState=lpDrawItemStruct->itemState;
  49. CFont* m_OldFont;
  50. CBrush cb;
  51. int calculodify;
  52. cb.CreateSolidBrush(m_clColor); //deberia ser blanco
  53. if (m_bMouserOver)
  54. m_OldFont=pdc->SelectObject(&m_cfontSelect);
  55. else
  56. m_OldFont=pdc->SelectObject(&m_cfontNormal);
  57. pdc->FillRect(rc,&cb);
  58. calculodify=rc.Height()-(m_SizeImage.cy);
  59. calculodify/=2;
  60. CPoint m_point=CPoint(12,calculodify+1);
  61. rc.left+=8; //identar a la derecha
  62. if (m_SizeImage.cx > 2)
  63. {
  64. pdc->DrawState (m_point, m_SizeImage,m_Icon,
  65. (uState==ODS_DISABLED?DSS_DISABLED:DSS_NORMAL),(CBrush*)NULL);
  66. }
  67. if (m_SizeText.cx > 2)
  68. {
  69. int nMode = pdc->SetBkMode(TRANSPARENT);
  70. COLORREF clOldColor=pdc->SetTextColor(RGB(0,0,200));
  71. rectletra=rc;
  72. rectletra.left+=m_iDent+m_SizeImage.cx+8;
  73. CPoint pt=CSize(rectletra.top,rectletra.left);
  74. if (uState & ODS_DISABLED)
  75. pdc->DrawState(pt, m_SizeText, m_szText, DSS_DISABLED, TRUE, 0, (CBrush*)NULL);
  76. else
  77. pdc->DrawText(m_szText,rectletra,DT_SINGLELINE|DT_LEFT|DT_BOTTOM);
  78. pdc->SetBkMode(nMode);
  79. pdc->SetTextColor(clOldColor);
  80. }
  81. pdc->SelectObject(m_OldFont);
  82. // TODO:  Add your code to draw the specified item
  83. }
  84. BOOL CGuiImageLinkButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
  85. {
  86. // TODO: Add your message handler code here and/or call default
  87. // ::SetCursor(::LoadCursor(NULL,IDC_HAND));
  88. return TRUE;
  89. //return CGuiToolButton::OnSetCursor(pWnd, nHitTest, message);
  90. }
  91. void CGuiImageLinkButton::OnMouseMove(UINT nFlags, CPoint point)
  92. {
  93. // TODO: Add your message handler code here and/or call default
  94. //la idea es que solo se muestre el cursor hand si se esta sobre la imagen
  95. //o sobre la cadena
  96. CRect m_rect;
  97. GetClientRect(&m_rect);
  98. rectletra.left=m_rect.left+4;
  99. if (m_bMouserOver) return;
  100. if (rectletra.PtInRect(point))
  101. ::SetCursor(::LoadCursor(NULL,MAKEINTRESOURCE(32649)));//IDC_HAND));
  102. else
  103. ::SetCursor(::LoadCursor(NULL,IDC_ARROW));
  104. CGuiToolButton::OnMouseMove(nFlags, point);
  105. }
  106. //********************************************************************************
  107. BEGIN_MESSAGE_MAP(CGuiScrollButton, CGuiToolButton)
  108. ON_WM_MOUSEMOVE()
  109. ON_WM_TIMER()
  110. END_MESSAGE_MAP()
  111. CGuiScrollButton::CGuiScrollButton(void)
  112. {
  113. }
  114. CGuiScrollButton::~CGuiScrollButton(void)
  115. {
  116. }
  117. void CGuiScrollButton::OnMouseMove(UINT nFlags, CPoint point)
  118. {
  119. // TODO: Add your message handler code here and/or call default
  120. CGuiToolButton::OnMouseMove(nFlags, point);
  121. if (m_bMouserOvernew) 
  122. {
  123. SetTimer(2,20,0);
  124. }
  125. }
  126. void CGuiScrollButton::OnTimer(UINT nIDEvent)
  127. {
  128. // TODO: Add your message handler code here and/or call default
  129. CGuiToolButton::OnTimer(nIDEvent);
  130. // if (!m_bMouserOvernew) return;
  131. CRect rc;
  132. CPoint pt(GetMessagePos());
  133. ScreenToClient(&pt);
  134. GetClientRect(rc);
  135. if (rc.PtInRect(pt))
  136. {
  137. CWnd* pParent=GetParent();
  138. pParent->SendMessage(WM_COMMAND,GetDlgCtrlID());
  139. }
  140. CButton::OnTimer(nIDEvent);
  141. }