www.gusucode.com > 基于VC编程界面编程高级应用技术源码程序 > VC界面编程高级应用技术/code/3/AVIStatus/MyStatusBar.cpp
// BitmapStatusBar.cpp : implementation file #include "stdafx.h" #include "MyStatusBar.h" #include "resource.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //////////////////////////////////////////////////////////////////////////// // CMyStatusBar CMyStatusBar::CMyStatusBar() { } CMyStatusBar::~CMyStatusBar() { } //事件响应申明 BEGIN_MESSAGE_MAP(CMyStatusBar, CStatusBar) //{{AFX_MSG_MAP(CMyStatusBar) ON_WM_LBUTTONDOWN() ON_WM_RBUTTONDOWN() ON_WM_CREATE() ON_WM_SIZE() ON_CBN_SELCHANGE(IDC_COMBOX, OnSelchangeCombo) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMyStatusBar message handlers //对鼠标的左键击键信息进行响应 void CMyStatusBar::OnLButtonDown(UINT nFlags, CPoint point) { CRect rect; //得到大小写字母锁定区域的索引值 int cap=this->CommandToIndex(ID_INDICATOR_CAPS); //得到数字锁定区域的索引值 int num=this->CommandToIndex(ID_INDICATOR_NUM); //得到大小写字母锁定区域的索引值 int scrl=this->CommandToIndex(ID_INDICATOR_SCRL); //分别得到三个区域的区域范围 CRect capRect,numRect,scrlRect; this->GetItemRect(cap,&capRect); this->GetItemRect(num,&numRect); this->GetItemRect(scrl,&scrlRect); //查看当前鼠标位置正位于哪个区域 if(capRect.PtInRect(point)) { //进行一次虚拟"Caps Lock"按下的操作 SimulateHitKey(VK_CAPITAL); AfxMessageBox("已经进行了字母大小写切换!"); } if(numRect.PtInRect(point)) { //进行一次虚拟"NUM Lock"按下的操作 SimulateHitKey(VK_NUMLOCK); AfxMessageBox("已经进行了数字键锁定切换!"); } if(scrlRect.PtInRect(point)) { //进行一次虚拟"SCR LOCK"按下的操作 SimulateHitKey(VK_SCROLL); AfxMessageBox("已经进行了屏幕滚动切换!"); } //单击左键停止播放 if (::IsWindow(m_AnimateCtrl)) m_AnimateCtrl.Play(0,0,0); CStatusBar::OnLButtonDown(nFlags, point); } void CMyStatusBar::OnRButtonDown(UINT nFlags, CPoint point) { //单击右键开始播放 CRect rect; if (::IsWindow(m_AnimateCtrl)) m_AnimateCtrl.Play(0,-1,-1); CStatusBar::OnRButtonDown(nFlags, point); } int CMyStatusBar::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CStatusBar::OnCreate(lpCreateStruct) == -1) return -1; CRect rect,rect2; //建立组合列表框控件 m_ComboBox.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST,CRect(120,0,240,120),this,IDC_COMBOX); CString tmp; //在组合列表框控件中添加选项 for(int i=0;i<10;i++) { tmp.Format(">列表项%d<",i); m_ComboBox.AddString(tmp); } //设置当前选项 m_ComboBox.SetCurSel(0); //如果m_AnimateCtrl还没有被建立 if (!::IsWindow(m_AnimateCtrl)) { //建立AVI播放控件 m_AnimateCtrl.Create(WS_CHILD |WS_VISIBLE,rect,this,469456); m_AnimateCtrl.Open(IDR_AVI1); m_AnimateCtrl.GetClientRect(rect); //得到父窗口的宽度 this->GetParent()->GetWindowRect(&rect2); rect.right=rect2.Width()/2; rect.left=rect.right-100; //让m_AnimateCtrl居中 m_AnimateCtrl.MoveWindow(&rect); //开始循环播放 m_AnimateCtrl.Play(0,-1,-1); } return 0; } //当工具条的大小发生改变时,让m_AnimateCtrl居中 void CMyStatusBar::OnSize(UINT nType, int cx, int cy) { CStatusBar::OnSize(nType, cx, cy); CRect rect,rect2; m_AnimateCtrl.GetClientRect(&rect); if (::IsWindow(m_AnimateCtrl)) { this->GetParent()->GetClientRect(&rect2); rect.right=rect2.Width()/2; rect.left=rect.right-100; m_AnimateCtrl.MoveWindow(&rect); } } //组合列表框内容发生变化时调用: void CMyStatusBar::OnSelchangeCombo() { CString m_text; int sel=m_ComboBox.GetCurSel(); this->m_ComboBox.GetLBText(sel,m_text); AfxMessageBox("你选择的内容是----"+m_text); } //虚拟击键操作:nVirtualKey为键值码 void CMyStatusBar::SimulateHitKey(int nVirtualKey) { //按下 keybd_event(nVirtualKey,0x45,0,0 ); Sleep(100); //释放 keybd_event(nVirtualKey,0x45,KEYEVENTF_KEYUP,0); }