从CButton派生一个可检测按下状态和定时重复发送消息的按钮控件
来源:互联网 发布:电信运营商dpi数据 编辑:程序博客网 时间:2024/06/07 06:30
// PressButton.h : header file//#pragma once/////////////////////////////////////////////////////////////////////////////// CPressButton windowclass CPressButton : public CButton{ // Constructionpublic: CPressButton(); // Attributespublic: UINT m_RepeateIntTick; //重复间隔ms =0时不重复 BOOL m_bIsPressedFlag; //按下标记? // Operationspublic: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CPressButton) //}}AFX_VIRTUAL // Implementationpublic: virtual ~CPressButton(); // Generated message map functionsprotected: //{{AFX_MSG(CPressButton) afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnTimer(UINT nIDEvent); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); //}}AFX_MSG DECLARE_MESSAGE_MAP() protected: BOOL m_bTimeStarted; //定时器已启动? void BeginClickEvent(); //处理按下事件 void EndClickEvent(); //处理抬起事件 void PostClickMsg(); //发送消息};/////////////////////////////////////////////////////////////////////////////
// PressButton.cpp : implementation file#include "stdafx.h"#include "PressButton.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CPressButtonCPressButton::CPressButton(){ m_bIsPressedFlag = FALSE; m_bTimeStarted = FALSE; m_RepeateIntTick = 1000; //重复间隔ms}CPressButton::~CPressButton(){}BEGIN_MESSAGE_MAP(CPressButton, CButton)//{{AFX_MSG_MAP(CPressButton)ON_WM_LBUTTONUP()ON_WM_LBUTTONDOWN()ON_WM_TIMER()ON_WM_KEYDOWN()ON_WM_KEYUP()//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CPressButton message handlersvoid CPressButton::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default EndClickEvent(); CButton::OnLButtonUp(nFlags, point);}void CPressButton::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default BeginClickEvent(); CButton::OnLButtonDown(nFlags, point);}void CPressButton::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default BeginClickEvent(); CButton::OnKeyDown(nChar, nRepCnt, nFlags);}void CPressButton::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default EndClickEvent(); CButton::OnKeyUp(nChar, nRepCnt, nFlags);}void CPressButton::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default if(nIDEvent == 1) { PostClickMsg(); } CButton::OnTimer(nIDEvent);}void CPressButton::BeginClickEvent(){ if(!m_bIsPressedFlag) { PostClickMsg(); SetCapture(); m_bIsPressedFlag = TRUE; } if((!m_bTimeStarted) && m_RepeateIntTick > 0) { SetTimer(1, m_RepeateIntTick, NULL); m_bTimeStarted = TRUE; } }void CPressButton::EndClickEvent(){ if(m_bTimeStarted) { KillTimer(1); m_bTimeStarted = FALSE; } if(m_bIsPressedFlag) { ReleaseCapture(); m_bIsPressedFlag = FALSE; }}void CPressButton::PostClickMsg(){ GetParent()->PostMessage(WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(), BN_CLICKED), (LPARAM)m_hWnd);}
0 0
- 从CButton派生一个可检测按下状态和定时重复发送消息的按钮控件
- 从CButton派生一个选择颜色的颜色选择控件
- 改变CButton按钮控件的文本和背景颜色
- 仿制发送按钮按下的消息
- CButton控件:mfc自绘按钮类,1张图片显示多种状态的方法
- 在自绘控件中创建多个CButton按钮时,如果设置按钮的消息(使用ON_COMMAND_RANGE消息)
- Delphi 中如何发送一个窗体上的按钮,按下消息
- 动态创建一个CButton按钮并实现其ON_BN_CLICKED消息
- 自己对“改变CButton按钮控件的文本和背景颜色”的理解
- 教你在mfc中 怎么得到和处理 控件的消息,比如 cbutton 的 onmousemove
- VC MFC按钮(CButton)控件
- VC/MFC按钮(CButton)控件
- VC MFC按钮(CButton)控件
- 一个从CStatic派生的动态曲线图绘制控件
- 获取窗口句柄并发送一个点击按钮的消息
- RabbitMQ+Spring Quartz 实现消息的定时发送和接收
- CButton 按钮类的重写
- 使用MFC 发送消息模拟按钮按下事件
- web.绑定事件
- [LeetCode]447. Number of Boomerangs(求回旋镖数量)
- 史上最全的java随机数生成算法(转)
- Guava学习笔记:Range
- Vue.js中使用Scss
- 从CButton派生一个可检测按下状态和定时重复发送消息的按钮控件
- 从谷歌商店下载apk的方法
- [17]BOM(浏览器对象模型)
- 匹配文本中的网址java正则表达式
- 行为型设计模式-责任链模式
- Android多进程
- 配置MyBatis的整合遇到的问题
- Activity声明周期中七个回调方法中应该做的事情
- Ubuntu 彻底删除 MYSQL 然后重装 MYSQL