WBButton.h
上传用户:wangdan
上传日期:2022-06-30
资源大小:739k
文件大小:4k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. #if !defined(AFX_WBBUTTON_H__518122CF_358F_11D4_8F4F_00402656D980__INCLUDED_)
  2. #define AFX_WBBUTTON_H__518122CF_358F_11D4_8F4F_00402656D980__INCLUDED_
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. class CAutoFont;
  7. #define SAFE_DELETE(p)  { if(p) { delete (p);     (p)=NULL; } }
  8. //////////////////////////////////////////////////
  9. // CWBButton - Window Blinds like button class
  10. //
  11. //功能:位图按钮类,实现按钮的位图显示
  12. //修改人:王健  
  13. //日期:2002年12月8日
  14. //
  15. // This class implements a Window Blinds like button
  16. class AFX_EXT_CLASS CWBButton : public CButton
  17. {
  18. public:
  19. CWBButton();
  20. // Methods
  21. public:
  22.     // Bitmap Loding and Initialize
  23.     bool LoadBitmaps
  24.     ( 
  25.          UINT id,          // ResourceID
  26.          int count,        // Num Of Pics
  27.          int TopHeight,    // Top Merigin for Resizing
  28.          int BottomHeight, // Bottom Merigin for Resizing
  29.          int LeftWidth,    // Left Merigin for Resizing
  30.          int RightWidth    // Right Merigin for Resizing
  31.     );
  32.     // Set Merigins
  33.     void SetButtonDef( int TopHeight, int BottomHeight, int LeftWidth, int RightWidth );
  34. protected:
  35.     enum mode
  36.     {
  37.         normal  = 0,
  38.         select  = 1,
  39.         focus   = 2,
  40.         disable = 3
  41.     };
  42.     enum state
  43.     {
  44.         notInited    = 0,
  45.         FileLoaded   = 1,
  46.         BitmapInited = 2
  47.     };
  48.     int m_State;
  49.     // Bitmaps
  50.     bool InitBitmap( CBitmap & src, CBitmap & dist, int index, int count);
  51.     void DrawBitmap( CDC * pDC, int mode );
  52.     UINT m_RcId;       // Resource ID
  53.     int  m_NumofPics;  
  54.     CBitmap NormalBitmap;
  55.     CBitmap SelectBitmap;
  56.     CBitmap FocusBitmap;
  57.     CBitmap DisableBitmap;
  58.     int m_TopHeight; //= 8;
  59.     int m_BottomHeight; //= 8;
  60.     int m_LeftWidth; //= 8;
  61.     int m_RightWidth;// = 17;
  62.     int m_dwWidth;
  63.     int m_dwHeight;
  64. // Transpararent BackColor
  65. protected:
  66.     COLORREF m_BkColor;
  67. public:
  68.     void SetBackColor( COLORREF color ) { m_BkColor = color; }
  69.     COLORREF GetBackColor() { return m_BkColor; }
  70. //Fonts
  71. protected:
  72.     CAutoFont * m_pFnt;
  73. public:
  74.     void SetTextFont( CFont & fnt );
  75.     void SetTextFont( CAutoFont & fnt );
  76.     CFont * GetTextFont() { return (CFont *)m_pFnt; }
  77.     CAutoFont * GetTextAutoFont() { return m_pFnt; }
  78.     void SetFontColor( COLORREF color );
  79. //{{AFX_VIRTUAL(CWBButton)
  80. public:
  81. virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  82. virtual void PreSubclassWindow();
  83. //}}AFX_VIRTUAL
  84. public:
  85. virtual ~CWBButton();
  86. protected:
  87. //{{AFX_MSG(CWBButton)
  88.     afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  89. //}}AFX_MSG
  90. DECLARE_MESSAGE_MAP()
  91. };
  92. #ifndef _MEMDC_H_
  93. #define _MEMDC_H_
  94. //////////////////////////////////////////////////
  95. // CMemDC - memory DC
  96. //
  97. // Author: Keith Rule
  98. // Email:  keithr@europa.com
  99. // Copyright 1996-1997, Keith Rule
  100. //
  101. // You may freely use or modify this code provided this
  102. // Copyright is included in all derived versions.
  103. //
  104. // This class implements a memory Device Context
  105. class CMemDC : public CDC {
  106. private:
  107. CBitmap* m_bitmap;
  108. CBitmap* m_oldBitmap;
  109. CDC* m_pDC;
  110. CRect m_rcBounds;
  111. public:
  112. CMemDC(CDC* pDC, const CRect& rcBounds) : CDC()
  113. {
  114. CreateCompatibleDC(pDC);
  115. m_bitmap = new CBitmap;
  116. m_bitmap->CreateCompatibleBitmap(pDC, rcBounds.Width(), rcBounds.Height());
  117. m_oldBitmap = SelectObject(m_bitmap);
  118. m_pDC = pDC;
  119. m_rcBounds = rcBounds;
  120.         //For some reason the background color is not correct,
  121.         //so we use the button face color.
  122.         DWORD color = ::GetSysColor( COLOR_BTNFACE );
  123.         CBrush bkg(color);
  124.         FillRect(rcBounds, &bkg);
  125. }
  126. ~CMemDC() 
  127. {
  128. m_pDC->BitBlt(m_rcBounds.left, m_rcBounds.top, m_rcBounds.Width(), m_rcBounds.Height(), 
  129. this, m_rcBounds.left, m_rcBounds.top, SRCCOPY);
  130. SelectObject(m_oldBitmap);
  131. if (m_bitmap != NULL) delete m_bitmap;
  132. }
  133. CMemDC* operator->() {
  134. return this;
  135. }
  136. };
  137. #endif
  138. /////////////////////////////////////////////////////////////////////////////
  139. //{{AFX_INSERT_LOCATION}}
  140. // Microsoft Visual C++ 
  141. #endif // !defined(AFX_WBBUTTON_H__518122CF_358F_11D4_8F4F_00402656D980__INCLUDED_)