MFC之按键消息(长按处理)
想要实现长按键的一些控制,查了查可以通过捕获键盘事件,然后处理按键时需要进行的操作。下面简单的实现左右按键界面更新数值加减。
1. 重载PreTranslateMessage(MSG* pMsg)函数,在函数中捕获键盘事件并处理响应:
BOOL CEditTestDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_RIGHT)
{
tmp++;
m_value.Format(_T("%d"),tmp);
GetDlgItem(IDC_EDIT1)->SetWindowText(m_value);
return TRUE;
}
if (pMsg->wParam == VK_LEFT)
{
tmp--;
m_value.Format(_T("%d"),tmp);
GetDlgItem(IDC_EDIT1)->SetWindowText(m_value);
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
以前一直使用UpdateData()函数更新,但是这次发现GetDlgItem()更适合现在的情况,只更新该控件而不会刷新其他数据。
2. 以上已经可以实现,但是如果想调整多久算长按,那可以通过定时器来实现:
重载PreTranslateMessage(MSG* pMsg)函数
BOOL CEditTestDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
this->SetTimer(,,NULL);
m_bKeyDown = TRUE;
if (pMsg->wParam == VK_RIGHT)
{
m_bRight = TRUE;
return TRUE;
}
if (pMsg->wParam == VK_LEFT)
{
m_bLeft = TRUE;
return TRUE;
}
}
else if (pMsg->message == WM_KEYUP)
{
m_bRight = FALSE;
m_bLeft = FALSE;
m_bKeyDown = FALSE;
KillTimer();
}
return CDialog::PreTranslateMessage(pMsg);
}
定时器处理:
void CEditTestDlg::OnTimer(UINT_PTR nIDEvent)
{
switch (nIDEvent)
{
case :
……
case :
if (m_bKeyDown)
{
if (m_bLeft)
{
tmp--;
m_value.Format(_T("%d"),tmp);
GetDlgItem(IDC_EDIT1)->SetWindowText(m_value);
//UpdateData(FALSE);
}
if (m_bRight)
{
tmp++;
m_value.Format(_T("%d"),tmp);
GetDlgItem(IDC_EDIT1)->SetWindowText(m_value);
//UpdateData(FALSE);
}
}
break;
default:
break;
}
CDialog::OnTimer(nIDEvent);
}
这样按键响应会更快,但是自带的定时器精度不够高,也可以通过自己实现高精度定时器来控制。
注意:处理按键消息时间以后,需要返回TRUE,不然对话框任然会响应该按键消息,至于PreTranslateMessage(MSG* pMsg)对消息的捕获和屏蔽以及返回值的意义见:
MFC之CToolTipCtrl按钮提示(消息捕获和消息传递)
MFC之按键消息(长按处理)的更多相关文章
- Android通过Intent.ACTION_CLOSE_SYSTEM_DIALOGS监听Home按键消息
Android对屏幕下方经常使用的四个按键消息处理是不一致的: 1.搜索按键的消息在onKeyDown或者onKeyUp中接收: 2.菜单按键的消息在onCreateOptionsMenu.onKey ...
- 学习windows编程 day5 之按键消息
case WM_KEYDOWN://带sys的按键消息大多是系统需要自己处理的,我们一般不需要,默认处理 //wParam 指定按键的虚拟键代码 //lParam 指定技术,扫描码,闲钱状态,转换状态 ...
- MFC 三种消息
在MFC应用程序中传输的消息有三种类型:窗口消息.命令消息和控件通知. (1)窗口消息:WM_XXX 窗口消息(Window Message)一般与窗口的内部运作有关,如:创建窗口.绘制窗口和销毁窗口 ...
- 【CC2530强化实训02】普通延时函数实现按键的长按与短按
[CC2530强化实训02]普通延时函数实现按键的长按与短按 [题目要求] 用一个按键实现单击与双击的功能已经是很多嵌入式产品的常用手法.使用定时器的间隔定时来计算按键按下的时间是通用的做法 ...
- 【CC2530强化实训01】普通延时函数实现按键的长按与短按
[CC2530强化实训01]普通延时函数实现按键的长按与短按 [题目要求] 用一个按键实现长按与短按的功能已经是很多嵌入式产品的常用手法.使用定时器的间隔定时来进行按键按下的时间是通用的做法, ...
- SDK_按键消息的拦截
按键消息的拦截 拦截是为了在原有功能的基础上增加自己的操作 扩展:当按钮接收到点击消息的时候,响应的是WM_LBUTTONDOWN消息,按钮的会被这个消息打包成一个WM_COMMAND 消息发送给父窗 ...
- Formview单文档或对话框项目接受不到按键消息的解决办法
当对话框或formview界面上有控件时,由于焦点在控件上,因此wm_char,wm_keydown等按键消息会被控件捕获,而导致对话框或formview无法接受该类按键消息.这时候通常的解决方法是在 ...
- PreTranslateMessage()函数捕获键盘按键消息
01. PreTranslateMessage函数,常用于屏蔽MFC对话框中默认的Enter和ESC消息 函数原型:BOOL PreTranslateMessage(MSG* pMsg) 用法举例: ...
- MFC中添加消息响应函数
转自:http://blog.csdn.net/eddy_liu/article/details/8474677 目前,用MFC设计的Windows应用程序几乎都采用文档/视图结构.这种程序框架与简单 ...
随机推荐
- Django URL传递参数的方法总结
1 无参数情况 配置URL及其视图如下: 1 2 3 4 (r'^hello/$', hello) def hello(request): return HttpResponse("He ...
- 告别LVS:使用keepalived+nginx实现负载均衡代理多个https
需求1:CDN小节点使用尽可能少的资源实现高可用和负载均衡需求2:需要支持10多个HTTPS站点的反向代理后端环境:nginx在前端做url_hash,后端缓存服务器使用squid和lighttpd分 ...
- LSI SAS 2208 配置操作
配置LSISAS2208 介绍LSISAS2208扣卡的配置方法. 2.1 登录CU界面 介绍登录LSISAS2208的CU配置界面的方法,以及CU界面的主要功能. 2.2 创建RAID 介绍创建RA ...
- Creating LVM Logical Volumes
LVM-Logical Volume Manager逻辑卷管理的一些基本概念: 用途: 在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区.当系统添加了新的磁盘,通 ...
- 矩阵快速幂(入门) 学习笔记hdu1005, hdu1575, hdu1757
矩阵快速幂是基于普通的快速幂的一种扩展,如果不知道的快速幂的请参见http://www.cnblogs.com/Howe-Young/p/4097277.html.二进制这个东西太神奇了,好多优秀的算 ...
- Mui实现退出登录
document.getElementById("logout").addEventListener("tap",function(){ var btn=[&q ...
- SpringMVC04controller中定义多个方法
public class MyController extends MultiActionController { // 新增 方法修饰符要是public public ModelAndView ad ...
- java获取字符串格式日期向前或向后n天的日期
private void setTilteMessage(){ BaseDao dao = new BaseDao(); String titleData = da ...
- 营配数据质量核查,关于营销mis系统与配电gis系统里面的sql语句查询,做为积累使用,下次就不用重复写同样的语句了。
1.配电gis线路导出数据: select r.name 线路名称,r.run_status 运行状态,r.voltage_level 电压等级,r.manager_depart 管理部门,r.bel ...
- zepto源码研究 - zepto.js-3 (常用的工具)
pluck: /** * 根据是否存在此属性来获取当前集合,返回一组属性值 * @param property * @returns {*} */ pluck: function(property){ ...