cdxCSizeIconCtrl.cpp
上传用户:cbxyz2008
上传日期:2007-01-02
资源大小:45k
文件大小:4k
源码类别:

Static控件

开发平台:

Visual C++

  1. // cdxCSizeIconCtrl.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "cdxCSizeIconCtrl.h"
  5. #include <winuser.h>
  6. #ifndef OBM_SIZE
  7. #define OBM_SIZE 32766
  8. #pragma message("*** NOTE[cdxCSizeIconCtrl.cpp]: Please define OEMRESOURCE in your project settings !")
  9. // taken from WinresRc.h
  10. // if not used for any reason
  11. #endif
  12. #ifdef _DEBUG
  13. #define new DEBUG_NEW
  14. #undef THIS_FILE
  15. static char THIS_FILE[] = __FILE__;
  16. #endif
  17. /////////////////////////////////////////////////////////////////////////////
  18. // cdxCSizeIconCtrl::AutoOEMImageList
  19. /////////////////////////////////////////////////////////////////////////////
  20. /////////////////////////////////////////////////////////////////////////////
  21. // construction
  22. /////////////////////////////////////////////////////////////////////////////
  23. /*
  24.  * one-step construction for my image list
  25.  * (allows to use the AutoOEMImageList as static member)
  26.  */
  27. cdxCSizeIconCtrl::AutoOEMImageList::AutoOEMImageList(UINT nBitmapID, COLORREF crMask)
  28. {
  29. CBitmap cbmp;
  30. BITMAP bmp;
  31. VERIFY( cbmp.LoadOEMBitmap(nBitmapID) );
  32. VERIFY( cbmp.GetBitmap(&bmp) );
  33. m_szImage.cx = bmp.bmWidth;
  34. m_szImage.cy = bmp.bmHeight;
  35. VERIFY( Create(bmp.bmWidth,bmp.bmHeight,ILC_COLOR4|ILC_MASK,0,1) );
  36. int i = Add(&cbmp,crMask);
  37. ASSERT(i == 0);
  38. }
  39. /////////////////////////////////////////////////////////////////////////////
  40. // cdxCSizeIconCtrl
  41. /////////////////////////////////////////////////////////////////////////////
  42. IMPLEMENT_DYNAMIC(cdxCSizeIconCtrl,CScrollBar);
  43. /////////////////////////////////////////////////////////////////////////////
  44. cdxCSizeIconCtrl::AutoOEMImageList cdxCSizeIconCtrl::M_ilImage(OBM_SIZE,::GetSysColor(COLOR_BTNFACE));
  45. HCURSOR cdxCSizeIconCtrl::M_hcSize = ::LoadCursor(NULL,IDC_SIZENWSE);
  46. /////////////////////////////////////////////////////////////////////////////
  47. // construction
  48. /////////////////////////////////////////////////////////////////////////////
  49. BEGIN_MESSAGE_MAP(cdxCSizeIconCtrl, CScrollBar)
  50. //{{AFX_MSG_MAP(cdxCSizeIconCtrl)
  51. ON_WM_PAINT()
  52. ON_WM_SETCURSOR()
  53. ON_WM_LBUTTONDBLCLK()
  54. //}}AFX_MSG_MAP
  55. END_MESSAGE_MAP()
  56. /////////////////////////////////////////////////////////////////////////////
  57. // cdxCSizeIconCtrl inlines
  58. /////////////////////////////////////////////////////////////////////////////
  59. /*
  60.  * create short-cut
  61.  */
  62. BOOL cdxCSizeIconCtrl::Create(CWnd *pParent, UINT id)
  63. {
  64. ASSERT(pParent != NULL);
  65. CRect rect;pParent->GetClientRect(&rect);
  66. if(!CScrollBar::Create( SBS_SIZEBOX|SBS_SIZEBOXBOTTOMRIGHTALIGN|
  67. WS_CHILD,
  68. rect,
  69. pParent,id))
  70. return FALSE;
  71. VERIFY( ModifyStyleEx(0,WS_EX_TRANSPARENT) );
  72. return TRUE;
  73. }
  74. /////////////////////////////////////////////////////////////////////////////
  75. // cdxCSizeIconCtrl message handlers
  76. /////////////////////////////////////////////////////////////////////////////
  77. /*
  78.  * draw icon
  79.  */
  80. void cdxCSizeIconCtrl::OnPaint() 
  81. {
  82. CPaintDC dc(this); // device context for painting
  83. if(GetParent() && (!GetParent()->IsZoomed() || !m_bReflectParentState))
  84. {
  85. CRect rect;GetClientRect(&rect);
  86. CSize sz = M_ilImage.Size();
  87. VERIFY( M_ilImage.Draw( &dc,
  88. 0,
  89. CPoint(rect.right - sz.cx,rect.bottom - sz.cy),
  90. ILD_NORMAL|ILD_TRANSPARENT) );
  91. }
  92. }
  93. /////////////////////////////////////////////////////////////////////////////
  94. // cdxCSizeIconCtrl Cursor
  95. /////////////////////////////////////////////////////////////////////////////
  96. /*
  97.  * set the cursor.
  98.  */
  99. BOOL cdxCSizeIconCtrl::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
  100. {
  101. if(GetParent() && (!GetParent()->IsZoomed() || !m_bReflectParentState))
  102. ::SetCursor((nHitTest == HTCLIENT) ? M_hcSize : NULL);
  103. return TRUE;
  104. }
  105. /*
  106.  * catch Doubleclick - if you don't do that,
  107.  * the window will be maximized if you double-blick
  108.  * the control.
  109.  * Don't know why, but it's annoying.
  110.  */
  111. void cdxCSizeIconCtrl::OnLButtonDblClk(UINT nFlags, CPoint point) 
  112. {
  113. // CScrollBar::OnLButtonDblClk(nFlags, point);
  114. }