ExtBtnOnFlat.cpp
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:3k
源码类别:

界面编程

开发平台:

Visual C++

  1. // This is part of the Professional User Interface Suite library.
  2. // Copyright (C) 2001-2009 FOSS Software, Inc.
  3. // All rights reserved.
  4. //
  5. // http://www.prof-uis.com
  6. // mailto:support@prof-uis.com
  7. //
  8. // This source code can be used, modified and redistributed
  9. // under the terms of the license agreement that is included
  10. // in the Professional User Interface Suite package.
  11. //
  12. // Warranties and Disclaimers:
  13. // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
  14. // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  16. // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
  17. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
  18. // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
  19. // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
  20. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  21. #include "stdafx.h"
  22. #include <ExtBtnOnFlat.h>
  23. #if (!defined __EXT_POPUP_MENU_WND_H)
  24. #include <ExtPopupMenuWnd.h>
  25. #endif
  26. #ifdef _DEBUG
  27. #define new DEBUG_NEW
  28. #undef THIS_FILE
  29. static char THIS_FILE[] = __FILE__;
  30. #endif
  31. /////////////////////////////////////////////////////////////////////////////
  32. // CExtBtnOnFlat
  33. CExtBtnOnFlat::CExtBtnOnFlat()
  34. {
  35. m_bCurrentlyIsFlat = TRUE;
  36. }
  37. CExtBtnOnFlat::~CExtBtnOnFlat()
  38. {
  39. }
  40. IMPLEMENT_DYNCREATE(CExtBtnOnFlat, CButton);
  41. BEGIN_MESSAGE_MAP(CExtBtnOnFlat, CButton)
  42. //{{AFX_MSG_MAP(CExtBtnOnFlat)
  43. ON_WM_MOUSEMOVE()
  44. ON_WM_TIMER()
  45. ON_WM_ERASEBKGND()
  46. //}}AFX_MSG_MAP
  47. END_MESSAGE_MAP()
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CExtBtnOnFlat message handlers
  50. void CExtBtnOnFlat::OnMouseMove(UINT nFlags, CPoint point) 
  51. {
  52. CButton::OnMouseMove(nFlags, point);
  53. if( CExtPopupMenuWnd::TestHoverEnabledFromActiveHWND( m_hWnd ) )
  54. {
  55. SetTimer( 1, 50, NULL );
  56. OnTimer( 1 );
  57. }
  58. }
  59. void CExtBtnOnFlat::OnTimer(__EXT_MFC_UINT_PTR nIDEvent) 
  60. {
  61. if( nIDEvent == 1 )
  62. {
  63. POINT pt;
  64. if( ! ::GetCursorPos( &pt ) )
  65. return;
  66. CRect rcItem;
  67. GetWindowRect( &rcItem );
  68. static bool bPainted = false;
  69. if(!rcItem.PtInRect(pt))
  70. {
  71. KillTimer(1);
  72. if(!m_bCurrentlyIsFlat)
  73. {
  74. m_bCurrentlyIsFlat = TRUE;
  75. ModifyStyle(0,BS_FLAT);
  76. RedrawWindow();
  77. }
  78. }
  79. else
  80. {
  81. if(m_bCurrentlyIsFlat)
  82. {
  83. m_bCurrentlyIsFlat = FALSE;
  84. ModifyStyle(BS_FLAT,0);
  85. RedrawWindow();
  86. }
  87. }
  88. return;
  89. } // if( nIDEvent == 1 )
  90. CButton::OnTimer(nIDEvent);
  91. }
  92. BOOL CExtBtnOnFlat::OnEraseBkgnd(CDC* pDC) 
  93. {
  94. pDC;
  95. return TRUE;
  96. }
  97. void CExtBtnOnFlat::PreSubclassWindow() 
  98. {
  99. CButton::PreSubclassWindow();
  100. ModifyStyle(0, BS_FLAT);
  101. }