鼠标单击和双击处理
2013-04-08 09:15
204 查看
/**************************************************************************** * =========================================================================== * * 文件名: mousehandle.h * 描述: * * 版本: 1.0 * 创建时间: 2013-4-5 11:22:5 * 编译环境: Visual Studio 2005 * * 作者: 张永昌 * 单位: 华中师范大学计算机科学系 * * =========================================================================== *****************************************************************************/ #ifndef MOUSEHANDLE_H_ #define MOUSEHANDLE_H_ #ifndef MESSAGE_TEST #define MESSAGE_TEST #endif class IMouseListener { public: virtual void MouseDown(int nX, int nY) = 0; virtual void MouseUp(int nX, int nY) = 0; virtual void MouseDbClick(int nX, int nY) = 0; virtual void MouseMove(int nX, int nY) = 0; virtual ~IMouseListener(); }; class IEnventHandle { public: virtual void Click(int nX, int nY) = 0; virtual void DbClick(int nX, int nY) = 0; virtual ~IEnventHandle(); }; #endif
#include "stdafx.h" #include "mousehandle.h" IMouseListener::~IMouseListener() { } IEnventHandle::~IEnventHandle() { }
/****************************************************************************
* =========================================================================== * * 文件名: mousehandleimp.h * 描述: * * 版本: 1.0 * 创建时间: 2013-4-6 21:32:1 * 编译环境: Visual Studio 2005 * * 作者: 张永昌 * 单位: 华中师范大学计算机科学系 * * =========================================================================== *****************************************************************************/ #ifndef MOUSEHANDLEIMP_H_ #define MOUSEHANDLEIMP_H_ #include "mousehandle.h" class MouseListener : public IMouseListener { public: MouseListener(IEnventHandle *pEnventHandle); // Interface for mouse public: virtual void MouseDown(int nX, int nY); virtual void MouseUp(int nX, int nY); virtual void MouseDbClick(int nX, int nY); virtual void MouseMove(int nX, int nY); public: virtual ~MouseListener(); private: // Internal mouse thing type typedef enum _eMouseThing { CLICKTHING = 0, DBCLICKTHING = 1 }eMouseThing; eMouseThing m_MouseThing; IEnventHandle *m_pEnventHandle; // Point buffer int m_nCachePointX; int m_nCachePointY; }; class ControlPointHandle : public IEnventHandle { public: ControlPointHandle(); // Interface for MouseListener public: virtual void Click(int nX, int nY); virtual void DbClick(int nX, int nY); virtual ~ControlPointHandle(); private: typedef enum _eSelectState { NOTBEGIN = 0, BEGIN = 1, END = 2 }eSelectState; eSelectState m_SelectState; }; #endif
#include "stdafx.h"#include "mousehandleimp.h"#include "controlpointimp.h"MouseListener::MouseListener(IEnventHandle *pEnventHandle){m_pEnventHandle = pEnventHandle;}void MouseListener::MouseDown(int nX, int nY){m_nCachePointX = nX;m_nCachePointY = nY;}void MouseListener::MouseUp(int nX, int nY){MSG msg;DWORD dwBegin = GetTickCount();DWORD dwClickInterval = 0;while (true){if (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)){if (msg.message == WM_LBUTTONDBLCLK){m_MouseThing = DBCLICKTHING;break;}}dwClickInterval = GetTickCount() - dwBegin;if (dwClickInterval > GetDoubleClickTime()){m_MouseThing = CLICKTHING;m_pEnventHandle->Click(m_nCachePointX, m_nCachePointY);break;}else{continue;}}}void MouseListener::MouseDbClick(int nX, int nY){MSG msg;DWORD dwBegin = GetTickCount();DWORD dwClickInterval = 0;while (true){if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){if (msg.message == WM_LBUTTONUP && m_MouseThing == DBCLICKTHING){m_pEnventHandle->DbClick(m_nCachePointX, m_nCachePointY);break;}}dwClickInterval = GetTickCount() - dwBegin;if (dwClickInterval > GetDoubleClickTime()){m_MouseThing = CLICKTHING;break;}else{continue;}}m_MouseThing = CLICKTHING;}void MouseListener::MouseMove(int nX, int nY){}MouseListener::~MouseListener(){}ControlPointHandle::ControlPointHandle(){}ControlPointHandle::~ControlPointHandle(){}void ControlPointHandle::Click(int nX, int nY){CString sTemp;sTemp.Format(_T("Click\n"));TRACE(sTemp);if (NOTBEGIN == m_SelectState){m_SelectState = BEGIN;}else if (BEGIN == m_SelectState){m_SelectState = BEGIN;}}void ControlPointHandle::DbClick(int nX, int nY){CString sTemp;sTemp.Format(_T("DbClick\n"));TRACE(sTemp);if (BEGIN == m_SelectState){m_SelectState = NOTBEGIN;}}
相关文章推荐
- MFC消息处理时,双击鼠标左键响应单击左键消息的处理
- 鼠标单击和双击中的事件处理
- DataGrid行随鼠标移动变色及单击双击行事件处理
- DataGrid行随鼠标移动变色及单击双击行事件处理
- Flash AS3 显示对象对鼠标单击,双击,拖拽事件的处理
- Flash AS3 显示对象对鼠标单击,双击,拖拽事件的处理
- 有些鼠标差劲的单击变成了双击,关闭了浏览器标签页的处理办法
- flash 中用单击事件区别处理双击和单击
- qt 实现、区分鼠标单击,双击事件
- 单击和双击事件的冲突处理示例代码
- js鼠标双击的时候如何屏蔽单击事件呢
- MFC学习笔记之:Windows如何区分鼠标双击和两次单击
- 自己留用,鼠标双击和单击
- unity鼠标单击双击事件
- MFC 处理双击事件时屏蔽掉单击事件
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
- GridView控件(六)—数据行响应鼠标的单击和双击事件
- 单击和双击事件的冲突处理
- android鼠标单击双击事件互不影响
- java小程序中鼠标事件的响应处理(包含右键、双击等)