ACTIVEBU.CPP
上传用户:zhang8947
上传日期:2007-01-08
资源大小:1910k
文件大小:4k
源码类别:

多国语言处理

开发平台:

Visual C++

  1. // activebu.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "cspublic.h"
  5. #include "resource.h"
  6. #include "basicwin.h"
  7. #include "basicbut.h"
  8. #include "systemse.h"
  9. #include "menubutt.h"
  10. #include "activebu.h"
  11. #include "cswin.h"
  12. #ifdef _DEBUG
  13. #undef THIS_FILE
  14. static char BASED_CODE THIS_FILE[] = __FILE__;
  15. #endif
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CActiveButton
  18. CActiveButton::CActiveButton()
  19. {
  20. }
  21. CActiveButton::~CActiveButton()
  22. {
  23. }
  24. //初始化动作按钮
  25. BOOL CActiveButton::InitButton(  LPCSTR  lpcsName ,  //窗口名称
  26. const RECT &rect , //窗口大小
  27. CWnd  *pParent , //父窗口
  28. UINT uWinID , //窗口ID
  29. LPCSTR lpcsExeFileName ) //执行文件名
  30. {
  31. if( _fstrlen( lpcsExeFileName ) > MAX_FILE_NAME_LEN )
  32. return 0 ;
  33. _fstrcpy( m_sExeFileName , lpcsExeFileName ) ;
  34. m_hIcon =::ExtractIcon( AfxGetApp()->m_hInstance ,
  35. lpcsExeFileName , 0 ) ; //得到执行文件的ICON
  36. m_nLeftButtonStatus =0 ; //初始鼠标左键没有按下
  37. m_bButtonStatus =1 ; //初始按钮是凸的
  38. //初始化该按钮
  39. return CBasicButton::InitButton( lpcsName , rect , pParent , uWinID ) ;
  40. }
  41. //得到按钮名称
  42. void CActiveButton::GetName( LPSTR lpsName )
  43. {
  44. _fstrcpy( lpsName , m_sExeFileName ) ;
  45. }
  46. BEGIN_MESSAGE_MAP(CActiveButton, CBasicButton)
  47. //{{AFX_MSG_MAP(CActiveButton)
  48. ON_WM_LBUTTONDOWN()
  49. ON_WM_LBUTTONUP()
  50. ON_WM_MOUSEMOVE()
  51. ON_WM_PAINT()
  52. //}}AFX_MSG_MAP
  53. END_MESSAGE_MAP()
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CActiveButton message handlers
  56. void CActiveButton::OnLButtonDown(UINT nFlags, CPoint point)
  57. {
  58. // TODO: Add your message handler code here and/or call default
  59. ((CCsWin*)GetParent())->ButtonDown( this , point ) ; //开始移动
  60. m_nLeftButtonStatus =1 ;
  61. m_OldDownPoint =point ;
  62. m_bButtonStatus =0 ; //凹下
  63. Invalidate() ;
  64. UpdateWindow() ;
  65. CBasicButton::OnLButtonDown(nFlags, point);
  66. }
  67. void CActiveButton::OnLButtonUp(UINT nFlags, CPoint point)
  68. {
  69. // TODO: Add your message handler code here and/or call default
  70. if( m_nLeftButtonStatus == 1 ) //鼠标左键按下并且没有移动
  71. {
  72. m_bButtonStatus =1 ; //凸起
  73. Invalidate() ;
  74. UpdateWindow() ;
  75. ::WinExec( m_sExeFileName , SW_SHOW ) ; //执行该程序
  76. }
  77. ((CCsWin*)GetParent())->ButtonUp() ; //停止移动
  78. m_nLeftButtonStatus =0 ;
  79. CBasicButton::OnLButtonUp(nFlags, point);
  80. }
  81. void CActiveButton::OnMouseMove(UINT nFlags, CPoint point)
  82. {
  83. // TODO: Add your message handler code here and/or call default
  84. switch( m_nLeftButtonStatus )
  85. {
  86. case 0:
  87. CBasicButton::OnMouseMove(nFlags, point);
  88. return ;
  89. case 1: //鼠标左键按下并且没有移动
  90. if( abs(point.x-m_OldDownPoint.x)<3 &&
  91. abs(point.y-m_OldDownPoint.y)<3 ) //移动距离过小
  92. break ;
  93. m_nLeftButtonStatus =2 ;
  94. m_bButtonStatus =1 ; //凸起
  95. Invalidate() ;
  96. UpdateWindow() ;
  97. case 2:
  98. //移动窗口
  99. ((CCsWin*)GetParent())->MoveWindowToNewPos( this , point ) ;
  100. break ;
  101. }
  102. CWnd::OnMouseMove(nFlags, point);
  103. }
  104. void CActiveButton::OnPaint()
  105. {
  106. CPaintDC dc(this); // device context for painting
  107. // TODO: Add your message handler code here
  108. RECT rect ;
  109. GetClientRect( &rect ) ; //得到大小
  110. rect.right-- ;
  111. rect.bottom-- ;
  112. DrawOneLineBox( dc.m_hDC , rect , m_bButtonStatus ,
  113. RGB(255,255,255),RGB(128,128,128),RGB(192,192,192) ) ; //画上底色
  114. //画上执行程序的ICON
  115. CDC MemDC ;
  116. MemDC.CreateCompatibleDC( &dc ) ;
  117. CBitmap Bitmap ;
  118. Bitmap.CreateCompatibleBitmap( &dc , 32 , 32 ) ;
  119. CBitmap *pOldBitmap =(CBitmap*)(MemDC.SelectObject( 
  120. &Bitmap ) ) ;
  121. //浅灰刷
  122. CBrush LowGrayBrush( RGB( 192 , 192 , 192 ) ) ;
  123. CBrush *pOldBrush =MemDC.SelectObject( &LowGrayBrush ) ;
  124. MemDC.PatBlt( 0 , 0 , 32 , 32 , PATCOPY ) ; //背景色
  125. MemDC.SelectObject( pOldBrush ) ;
  126. MemDC.DrawIcon( 0 , 0 , m_hIcon ) ; //把ICON画到内存DC中
  127. dc.StretchBlt( (rect.right-16)/2 , 1 , 
  128. 16 , 16 ,
  129. &MemDC , 0 , 0 , 32 , 32 , SRCCOPY ) ;
  130. MemDC.SelectObject( pOldBitmap ) ;
  131. // Do not call CBasicButton::OnPaint() for painting messages
  132. }