HMXFormView.cpp
上传用户:yinguanfa
上传日期:2022-02-19
资源大小:400k
文件大小:7k
源码类别:

ListView/ListBox

开发平台:

Visual C++

  1. // HMXFormView.cpp : implementation file
  2. //
  3. /********************************************************************
  4. created: 2001/10/25
  5. file: HMXFormView
  6. author: Massimo Colurcio
  7. homepage: http://www.softhor.com/developmentarea
  8. email: m.colurcio@softhor.com
  9. thanks to: an unknown programmer for bitmap drawing
  10. purpose: want a form with background bitmap or color?
  11. *********************************************************************/
  12. #include "stdafx.h"
  13. #include "HMXFormView.h"
  14. #ifdef _DEBUG
  15. #define new DEBUG_NEW
  16. #undef THIS_FILE
  17. static char THIS_FILE[] = __FILE__;
  18. #endif
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CHMXFormView
  21. CHMXFormView::CHMXFormView(UINT nIDD)
  22. : CFormView(nIDD)
  23. {
  24. CommonConstructor();
  25. }
  26. CHMXFormView::~CHMXFormView()
  27. {
  28. m_brsBkGnd.DeleteObject();
  29. }
  30. void CHMXFormView::DoDataExchange(CDataExchange* pDX)
  31. {
  32. CFormView::DoDataExchange(pDX);
  33. //{{AFX_DATA_MAP(CHMXFormView)
  34. // NOTE: the ClassWizard will add DDX and DDV calls here
  35. //}}AFX_DATA_MAP
  36. }
  37. BEGIN_MESSAGE_MAP(CHMXFormView, CFormView)
  38. //{{AFX_MSG_MAP(CHMXFormView)
  39. ON_WM_MOUSEMOVE()
  40. //}}AFX_MSG_MAP
  41. // ON_WM_NCPAINT()
  42. END_MESSAGE_MAP()
  43. /////////////////////////////////////////////////////////////////////////////
  44. // CHMXFormView diagnostics
  45. #ifdef _DEBUG
  46. void CHMXFormView::AssertValid() const
  47. {
  48. CFormView::AssertValid();
  49. }
  50. void CHMXFormView::Dump(CDumpContext& dc) const
  51. {
  52. CFormView::Dump(dc);
  53. }
  54. #endif //_DEBUG
  55. void CHMXFormView::CommonConstructor()
  56. {
  57. m_nType = BITMAP_TILE;
  58. m_nBkGnd = BKGND_NONE;
  59. m_brsBkGnd.CreateSolidBrush( m_clrBkGnd );
  60. }
  61. /********************************************************************
  62. created: 2001/10/25
  63. in: uResource, nType
  64. out: none
  65. return: TRUE is success 
  66.   
  67. purpose: set bitmap from resource
  68. *********************************************************************/
  69. bool CHMXFormView::SetBitmap(UINT uResource, int nType /*BITMAP_TILE*/)
  70. {
  71. bool bRet;
  72. m_nType = nType;
  73. ASSERT(m_nType == BITMAP_TILE || m_nType == BITMAP_STRETCH || m_nType == BITMAP_CENTER);
  74. m_nBkGnd = BKGND_IMAGE;
  75. bRet = m_bmpBkGnd.LoadResource(uResource)?true:false;
  76. Invalidate();
  77. return bRet;
  78. }
  79. /********************************************************************
  80. created: 2001/10/25
  81. in: sFileName, nType
  82. out: none
  83. return: TRUE if success 
  84.   
  85. purpose: set bitmap from BMP file
  86. *********************************************************************/
  87. bool CHMXFormView::SetBitmap(const CString& sFileName, int nType /*BITMAP_TILE*/)
  88. {
  89. bool bRet;
  90. m_nType = nType;
  91. ASSERT(m_nType == BITMAP_TILE || m_nType == BITMAP_STRETCH || m_nType == BITMAP_CENTER);
  92. m_nBkGnd = BKGND_IMAGE;
  93. bRet = m_bmpBkGnd.Load(sFileName)?true:false;
  94. Invalidate();
  95. return bRet;
  96. }
  97. /********************************************************************
  98. created: 2001/10/25
  99. in: clr
  100. out: none
  101. return: always TRUE
  102.   
  103. purpose: set background color
  104. *********************************************************************/
  105. bool CHMXFormView::SetBkClr( COLORREF clr )
  106. {
  107. m_clrBkGnd = clr;
  108. m_brsBkGnd.DeleteObject();
  109. m_brsBkGnd.CreateSolidBrush( m_clrBkGnd );
  110. m_nBkGnd = BKGND_COLOR;
  111. Invalidate();
  112. return true;
  113. }
  114. /********************************************************************
  115. created: 2001/10/25
  116. in: none
  117. out: none
  118. return: background color
  119.   
  120. purpose: get background color
  121. *********************************************************************/
  122. bool CHMXFormView::GetBkClr( COLORREF clr)
  123. {
  124. clr = m_clrBkGnd;
  125. return true;
  126. }
  127. /////////////////////////////////////////////////////////////////////////////
  128. // CHMXFormView message handlers
  129. /********************************************************************
  130. created: 2001/10/25
  131. in: pDC, see CWnd::OnDraw
  132. out: none
  133. return: none
  134.   
  135. purpose: draw background color or background bitmap
  136. *********************************************************************/
  137. void CHMXFormView::OnDraw(CDC* pDC) 
  138. {
  139. // TODO: Add your specialized code here and/or call the base class
  140. CRect rc;
  141. GetClientRect(rc);
  142. int x = 0, y = 0;
  143. switch( m_nBkGnd ) {
  144. case BKGND_COLOR:
  145. pDC->FillRect( &rc, &m_brsBkGnd);
  146. break;
  147. case BKGND_IMAGE:
  148. if(m_bmpBkGnd.GetPixelPtr() != 0) {
  149. ASSERT(m_nType == BITMAP_TILE || m_nType == BITMAP_STRETCH || m_nType == BITMAP_CENTER);
  150. switch(m_nType) {
  151. case BITMAP_CENTER:
  152. // center the bitmap
  153. CFormView::OnDraw(pDC);
  154. x = (rc.Width() - m_bmpBkGnd.GetWidth()) / 2;
  155. y = (rc.Height() - m_bmpBkGnd.GetHeight()) / 2;
  156. m_bmpBkGnd.DrawDIB(pDC, x, y);
  157. break;
  158. case BITMAP_STRETCH:
  159. // stretch bitmap so it will best fit to the dialog
  160. m_bmpBkGnd.DrawDIB(pDC, 0, 0, rc.Width(), rc.Height());
  161. break;
  162. default:
  163. // tile the bitmap
  164. while(y < rc.Height()) {
  165. while(x < rc.Width()) {
  166. m_bmpBkGnd.DrawDIB(pDC, x, y);
  167. x += m_bmpBkGnd.GetWidth();
  168. }
  169. x = 0;
  170. y += m_bmpBkGnd.GetHeight();
  171. }
  172. break;
  173. }
  174. }
  175. break;
  176. default:
  177. break;
  178. }
  179. return;
  180. }
  181. /********************************************************************
  182. created: 2001/10/25
  183. in: none
  184. out: none
  185. return: TRUE if success
  186.   
  187. purpose: handling palette changing
  188. *********************************************************************/
  189. BOOL CHMXFormView::OnQueryNewPalette() 
  190. {
  191. CPalette * pPal = m_bmpBkGnd.GetPalette();
  192. if( pPal != 0 && GetSafeHwnd() != 0 ) {
  193. CClientDC dc(this);
  194. CPalette * pOldPalette = dc.SelectPalette(pPal, FALSE);
  195. UINT nChanged = dc.RealizePalette();
  196. dc.SelectPalette(pOldPalette, TRUE);
  197. if (nChanged == 0)
  198. return FALSE;
  199. Invalidate();
  200. return TRUE;
  201. }
  202. return CHMXFormView::OnQueryNewPalette();
  203. }
  204. /********************************************************************
  205. created: 2001/10/25
  206. in: see CWnd::OnPaletteChanged
  207. out: see CWnd::OnPaletteChanged
  208. return: none
  209.   
  210. purpose: handling palette changing
  211. *********************************************************************/
  212. void CHMXFormView::OnPaletteChanged(CWnd* pFocusWnd) 
  213. {
  214. CPalette * pPal = m_bmpBkGnd.GetPalette();
  215. if( pPal != 0 && GetSafeHwnd() != 0 && pFocusWnd != this && ! IsChild(pFocusWnd) ) {
  216. CClientDC dc(this);
  217. CPalette * pOldPalette = dc.SelectPalette(pPal, TRUE);
  218. UINT nChanged = dc.RealizePalette();
  219. dc.SelectPalette(pOldPalette, TRUE);
  220. if( nChanged )
  221. Invalidate();
  222. } else
  223. CHMXFormView::OnPaletteChanged(pFocusWnd);
  224. }
  225. /********************************************************************
  226. created: 2001/10/25
  227. in: see CWnd::OnMouseMove
  228. out: see CWnd::OnMouseMove
  229. return: none
  230.   
  231. purpose: use this method to allow window movements dragging
  232. the window clicking the entire client area
  233. *********************************************************************/
  234. void CHMXFormView::OnMouseMove(UINT nFlags, CPoint point) 
  235. {
  236. // TODO: Add your message handler code here and/or call default
  237. //
  238. // Special Thanks to "Jens Rahm" <jens_rahm@hotmail.com>
  239. //
  240. if( nFlags == MK_LBUTTON ) {
  241. ::ReleaseCapture();
  242. GetParentFrame()->SendMessage( WM_NCLBUTTONDOWN, HTCAPTION, 0);
  243. }
  244. CFormView::OnMouseMove(nFlags, point);
  245. }