WBButton.h
上传用户:xiuanze55
上传日期:2013-06-16
资源大小:85k
文件大小:5k
源码类别:

其他数据库

开发平台:

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