XPStyleButtonST.cpp
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:5k
源码类别:

CA认证

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "XPStyleButtonST.h"
  3. #include <Windows.h>
  4. #include <Winuser.h>
  5. //#if(WINVER >= 0x0501)
  6. #ifdef THEMEAPI
  7. #include <tmschema.h>
  8. #else
  9. #define NO_THEMEAPI_FOUND
  10. #define BP_PUSHBUTTON 0x00000001
  11. #define PBS_NORMAL 0x00000001
  12. #define PBS_HOT 0x00000002
  13. #define PBS_PRESSED 0x00000003
  14. #define PBS_DISABLED 0x00000004
  15. #define PBS_DEFAULTED 0x00000005
  16. #endif
  17. #ifdef _DEBUG
  18. #undef THIS_FILE
  19. static char THIS_FILE[]=__FILE__;
  20. #define new DEBUG_NEW
  21. #endif
  22. IMPLEMENT_DYNCREATE(CXPStyleButtonST, CButtonST)
  23. CXPStyleButtonST::CXPStyleButtonST()
  24. {
  25. // No theme helper
  26. m_pTheme = NULL;
  27. // Don't use flat toolbar-style
  28. m_bDrawAsToolbar = FALSE;
  29. m_bDrawBorder = FALSE;
  30. }
  31. CXPStyleButtonST::~CXPStyleButtonST()
  32. {
  33. }
  34. // This function is called every time the button border needs to be painted.
  35. // If the button is in standard (not flat) mode this function will NOT be called.
  36. // This is a virtual function that can be rewritten in CButtonST-derived classes
  37. // to produce a whole range of buttons not available by default.
  38. //
  39. // Parameters:
  40. // [IN] pDC
  41. // Pointer to a CDC object that indicates the device context.
  42. // [IN] pRect
  43. // Pointer to a CRect object that indicates the bounds of the
  44. // area to be painted.
  45. //
  46. // Return value:
  47. // BTNST_OK
  48. // Function executed successfully.
  49. //
  50. DWORD CXPStyleButtonST::OnDrawBorder(CDC* pDC, CRect* pRect)
  51. {
  52. if (m_pTheme == NULL || m_pTheme->IsAppThemed() == FALSE)
  53. {
  54. return CButtonST::OnDrawBorder(pDC, pRect);
  55. } // if
  56. return BTNST_OK;
  57. } // End of OnDrawBorder
  58. // This function is called every time the button background needs to be painted.
  59. // If the button is in transparent mode this function will NOT be called.
  60. // This is a virtual function that can be rewritten in CButtonST-derived classes
  61. // to produce a whole range of buttons not available by default.
  62. //
  63. // Parameters:
  64. // [IN] pDC
  65. // Pointer to a CDC object that indicates the device context.
  66. // [IN] pRect
  67. // Pointer to a CRect object that indicates the bounds of the
  68. // area to be painted.
  69. //
  70. // Return value:
  71. // BTNST_OK
  72. // Function executed successfully.
  73. //
  74. DWORD CXPStyleButtonST::OnDrawBackground(CDC* pDC, CRect* pRect)
  75. {
  76. BOOL bDefaultDraw = FALSE;
  77. // No theme helper passed
  78. if (m_pTheme == NULL || m_pTheme->IsAppThemed() == FALSE)
  79. {
  80. bDefaultDraw = TRUE;
  81. } // if
  82. else
  83. {
  84. HTHEME hTheme = NULL;
  85. int iStateId = 0;
  86. hTheme = m_pTheme->OpenThemeData(GetSafeHwnd(), m_bDrawAsToolbar ? L"TOOLBAR" : L"BUTTON");
  87. if (hTheme)
  88. {
  89. iStateId = PBS_NORMAL; // Normal
  90. if ((m_bIsDefault && !m_bDrawAsToolbar) ||
  91. (m_bIsDefault && m_bDrawAsToolbar && m_bDrawBorder)) iStateId = PBS_DEFAULTED; // Default button
  92. if (m_bMouseOnButton) iStateId = PBS_HOT; // Hot
  93. if (m_bIsPressed) iStateId = PBS_PRESSED; // Pressed
  94. if (m_bIsDisabled) iStateId = PBS_DISABLED; // Disabled
  95. //new
  96. // m_pTheme->DrawThemeBackground(hTheme, GetSafeHwnd(), pDC->GetSafeHdc(), BP_PUSHBUTTON, iStateId, pRect, NULL);
  97. m_pTheme->DrawThemeBackground(hTheme, m_hWnd, pDC->GetSafeHdc(), BP_PUSHBUTTON, iStateId, pRect, NULL);
  98. m_pTheme->CloseThemeData(hTheme);
  99. } // if
  100. else
  101. {
  102. bDefaultDraw = TRUE;
  103. } // else
  104. } // else
  105. if (bDefaultDraw)
  106. {
  107. return CButtonST::OnDrawBackground(pDC, pRect);
  108. } // if
  109. return BTNST_OK;
  110. } // End of OnDrawBackground
  111. // This function assigns a CThemeHelperST instance to the button.
  112. //
  113. // Parameters:
  114. // [IN] pTheme
  115. // Pointer to a CThemeHelperST instance.
  116. // Pass NULL to remove any previous instance.
  117. //
  118. void CXPStyleButtonST::SetThemeHelper(CThemeHelperST* pTheme)
  119. {
  120. m_pTheme = pTheme;
  121. // No theme active ?
  122. if (m_pTheme == NULL || m_pTheme->IsAppThemed() == FALSE)
  123. {
  124. m_bDrawBorder = TRUE;
  125. } // if
  126. } // End of SetThemeHelper
  127. // This function sets if the button must be drawn using the flat toolbar-style.
  128. //
  129. // Parameters:
  130. // [IN] bDrawAsToolbar
  131. // If TRUE the button will be drawn using the flat toolbar-style.
  132. // [IN] bRepaint
  133. // If TRUE the control will be repainted.
  134. //
  135. // Return value:
  136. // BTNST_OK
  137. // Function executed successfully.
  138. //
  139. DWORD CXPStyleButtonST::DrawAsToolbar(BOOL bDrawAsToolbar, BOOL bRepaint)
  140. {
  141. m_bDrawAsToolbar = bDrawAsToolbar;
  142. // Repaint the button
  143. if (bRepaint) Invalidate();
  144. return BTNST_OK;
  145. } // End of DrawAsToolbar
  146. #ifdef NO_THEMEAPI_FOUND
  147. #undef NO_THEMEAPI_FOUND
  148. #undef BP_PUSHBUTTON
  149. #undef PBS_NORMAL
  150. #undef PBS_HOT
  151. #undef PBS_PRESSED
  152. #undef PBS_DISABLED
  153. #undef PBS_DEFAULTED
  154. #endif