MyStatusBar.cpp
上传用户:szcysw
上传日期:2013-03-11
资源大小:6752k
文件大小:4k
源码类别:

界面编程

开发平台:

Visual C++

  1. // BitmapStatusBar.cpp : implementation file
  2. #include "stdafx.h"
  3. #include "MyStatusBar.h"
  4. #include "resource.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. ////////////////////////////////////////////////////////////////////////////
  11. // CMyStatusBar
  12. CMyStatusBar::CMyStatusBar()
  13. {
  14. }
  15. CMyStatusBar::~CMyStatusBar()
  16. {
  17. }
  18. //事件响应申明
  19. BEGIN_MESSAGE_MAP(CMyStatusBar, CStatusBar)
  20. //{{AFX_MSG_MAP(CMyStatusBar)
  21. ON_WM_LBUTTONDOWN()
  22. ON_WM_RBUTTONDOWN()
  23. ON_WM_CREATE()
  24. ON_WM_SIZE()
  25. ON_CBN_SELCHANGE(IDC_COMBOX, OnSelchangeCombo)
  26. //}}AFX_MSG_MAP
  27. END_MESSAGE_MAP()
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CMyStatusBar message handlers
  30. //对鼠标的左键击键信息进行响应
  31. void CMyStatusBar::OnLButtonDown(UINT nFlags, CPoint point) 
  32. {
  33. CRect rect;
  34. //得到大小写字母锁定区域的索引值
  35. int cap=this->CommandToIndex(ID_INDICATOR_CAPS);
  36. //得到数字锁定区域的索引值
  37. int num=this->CommandToIndex(ID_INDICATOR_NUM);
  38. //得到大小写字母锁定区域的索引值
  39. int scrl=this->CommandToIndex(ID_INDICATOR_SCRL);
  40. //分别得到三个区域的区域范围
  41. CRect capRect,numRect,scrlRect;
  42. this->GetItemRect(cap,&capRect);
  43. this->GetItemRect(num,&numRect);
  44. this->GetItemRect(scrl,&scrlRect);
  45. //查看当前鼠标位置正位于哪个区域
  46. if(capRect.PtInRect(point))
  47. {
  48. //进行一次虚拟"Caps Lock"按下的操作
  49. SimulateHitKey(VK_CAPITAL);
  50. AfxMessageBox("已经进行了字母大小写切换!");
  51. }
  52. if(numRect.PtInRect(point))
  53. {
  54. //进行一次虚拟"NUM Lock"按下的操作
  55. SimulateHitKey(VK_NUMLOCK);
  56. AfxMessageBox("已经进行了数字键锁定切换!");
  57. }
  58. if(scrlRect.PtInRect(point))
  59. {
  60. //进行一次虚拟"SCR LOCK"按下的操作
  61. SimulateHitKey(VK_SCROLL);
  62. AfxMessageBox("已经进行了屏幕滚动切换!");
  63. }
  64. //单击左键停止播放
  65. if (::IsWindow(m_AnimateCtrl))
  66. m_AnimateCtrl.Play(0,0,0);
  67. CStatusBar::OnLButtonDown(nFlags, point);
  68. }
  69. void CMyStatusBar::OnRButtonDown(UINT nFlags, CPoint point) 
  70. {
  71. //单击右键开始播放
  72. CRect rect;
  73. if (::IsWindow(m_AnimateCtrl))
  74. m_AnimateCtrl.Play(0,-1,-1);
  75. CStatusBar::OnRButtonDown(nFlags, point);
  76. }
  77. int CMyStatusBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  78. {
  79. if (CStatusBar::OnCreate(lpCreateStruct) == -1)
  80. return -1;
  81. CRect rect,rect2;
  82. //建立组合列表框控件
  83. m_ComboBox.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST,CRect(120,0,240,120),this,IDC_COMBOX);
  84. CString tmp;
  85. //在组合列表框控件中添加选项
  86. for(int i=0;i<10;i++)
  87. {
  88. tmp.Format(">列表项%d<",i);
  89. m_ComboBox.AddString(tmp);
  90. }
  91. //设置当前选项
  92. m_ComboBox.SetCurSel(0);
  93. //如果m_AnimateCtrl还没有被建立
  94. if (!::IsWindow(m_AnimateCtrl))
  95.     {
  96. //建立AVI播放控件
  97. m_AnimateCtrl.Create(WS_CHILD |WS_VISIBLE,rect,this,469456);
  98. m_AnimateCtrl.Open(IDR_AVI1);
  99. m_AnimateCtrl.GetClientRect(rect);
  100. //得到父窗口的宽度 
  101. this->GetParent()->GetWindowRect(&rect2);
  102. rect.right=rect2.Width()/2;
  103. rect.left=rect.right-100;
  104. //让m_AnimateCtrl居中
  105. m_AnimateCtrl.MoveWindow(&rect);
  106. //开始循环播放
  107. m_AnimateCtrl.Play(0,-1,-1);
  108.     }
  109. return 0;
  110. }
  111. //当工具条的大小发生改变时,让m_AnimateCtrl居中
  112. void CMyStatusBar::OnSize(UINT nType, int cx, int cy) 
  113. {
  114. CStatusBar::OnSize(nType, cx, cy);
  115. CRect rect,rect2;
  116. m_AnimateCtrl.GetClientRect(&rect);
  117. if (::IsWindow(m_AnimateCtrl))
  118. {
  119. this->GetParent()->GetClientRect(&rect2);
  120. rect.right=rect2.Width()/2;
  121. rect.left=rect.right-100;
  122. m_AnimateCtrl.MoveWindow(&rect);
  123. }
  124. }
  125. //组合列表框内容发生变化时调用:
  126. void CMyStatusBar::OnSelchangeCombo()
  127. {
  128. CString m_text;
  129. int sel=m_ComboBox.GetCurSel();
  130. this->m_ComboBox.GetLBText(sel,m_text);
  131. AfxMessageBox("你选择的内容是----"+m_text);
  132. }
  133. //虚拟击键操作:nVirtualKey为键值码
  134. void CMyStatusBar::SimulateHitKey(int nVirtualKey)
  135. {
  136.     //按下    
  137. keybd_event(nVirtualKey,0x45,0,0 );
  138. Sleep(100);
  139. //释放
  140. keybd_event(nVirtualKey,0x45,KEYEVENTF_KEYUP,0);
  141. }