社区
界面
帖子详情
在函数中调用onkeydown?---急---
nostopping
2008-11-22 01:47:57
有两个消息处理函数:ontimer和onkeydown.如何让程序在响应ontimer时调用一下onkeydown查看当前有没有按键消息,即如何在ontimer中调用onkeydown消息处理函数?
...全文
857
15
打赏
收藏
在函数中调用onkeydown?---急---
有两个消息处理函数:ontimer和onkeydown.如何让程序在响应ontimer时调用一下onkeydown查看当前有没有按键消息,即如何在ontimer中调用onkeydown消息处理函数?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
nostopping
2008-11-25
打赏
举报
回复
好了,问题解决了.
我在ontimer里面用GetQueueStatus(QS_KEY)检查当前消息队列中的消息状况,然后再添加一个OnKeyDown(),用于处理在两个ontimer事件之间时的按键.以后如果只检查有没有按键而不对消息进行处理的话,最好用GetQueueStatus(QS_KEY).
谢谢上面的朋友!
yjgx007
2008-11-22
打赏
举报
回复
cnzdgs已经说的很清楚了,我再举个例子:
你按下A键 (key down),并马上弹回去(key up),很不凑巧,在Key down的时候,你的OnTimer函数没有被执行,因此,你无法得知key down,为什么没有被执行呢?
这是系统I/O中断所决定的,定时事件和键盘事件不可能同时并发作出响应处理,必须有一个中断优先级。如果你非要按这种思路去做,并且,系统可以并发处理OnTimer和key down,你就真的能保证OnTimer能在某一时刻及时捕捉到这个时刻的键盘动作吗?
如果你知道窗口消息的处理机制,每个窗口(对话框也是窗口)会有一个窗口过程函数WindowProc,里面处理相关的消息,当键盘消息key down到达窗口后,你处理这个消息即可,在CWnd中,封装了WindowProc的处理过程,并且会有一个PreProcessMessage的重载函数给你,你在里面处理WM_KEYDOWN即可。
cnzdgs
2008-11-22
打赏
举报
回复
如果要检查有没有键按下,可以用PeekMessage函数。但实际上是不需要检查的,键盘消息的优先级高于定时消息,就是说当程序从消息队列中取消息时,如果有键盘消息,是不会取出定时消息的。如果你的OnTimer函数需要执行很长时间,应该用一个单独的线程来处理。
study_live
2008-11-22
打赏
举报
回复
用keybd_event函数可模拟键盘输入, 可上MSDN上找下这个函数的用法
jinlingzwp
2008-11-22
打赏
举报
回复
在pretranslatemessage中响应
lwx300
2008-11-22
打赏
举报
回复
void CbutDlg::OnTimer(UINT_PTR nIDEvent)
{
MSG msg;
if (::PeekMessage(&msg, m_hWnd, WM_KEYDOWN, WM_KEYDOWN, PM_NOREMOVE))
{
Flag = true;
}
if (!Flag)
{
//do something
}
CDialog::OnTimer(nIDEvent);
}
wltg2001
2008-11-22
打赏
举报
回复
;然后在ontimer的处理函数中判断Flag的值,看看当前是否有键被按下过,我发现有时候系统onkeydown的响应比ontimer慢,
===============================
你弄错了一个问题,当OnTimer在执行时,就是你按了键,也不会马上触发OnKeyDown的,消息处理函数正在处理OnTimer时又怎么会同时处理按键呢?
至于上面所说的中OnTimer中调用OnKeyDown就更是胡说了,你的目的是检测键是否按下去了,不是对按下键之后进行处理,如果你真的在OnTimer中调用OnKeyDown,即使没有按键,也会当作你按了键一样.
nostopping
2008-11-22
打赏
举报
回复
void CInvokeOnKeyDownDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
AfxMessageBox("key down");
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CInvokeOnKeyDownDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
OnKeyDown();
}
提示: error C2660: 'CInvokeOnKeyDownDlg::OnKeyDown' : function does not take 0 arguments
nostopping
2008-11-22
打赏
举报
回复
直接调用onkeydown(),不用传参数吗?
etz2008
2008-11-22
打赏
举报
回复
bool Flag = false;
void CbutDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
Flag = true;
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CbutDlg::OnTimer(UINT_PTR nIDEvent)
{
//能不能在这儿先调用onkeydown,再执行下面的代码?
//要确保在有键被按下时首先被onkeydown处理,即把Flag设为true
if (!Flag)
{
//do something
}
CDialog::OnTimer(nIDEvent);
}
可以
一条晚起的虫
2008-11-22
打赏
举报
回复
OnTimer()
{
OnKeyDown(); //类成员函数,直接掉用。
}
nostopping
2008-11-22
打赏
举报
回复
先介绍下我的程序(基于对话框的单文档程序):
有一个全局变量比如Flag,当响应onkeydown的时候让Flag=true;然后在ontimer的处理函数中判断Flag的值,看看当前是否有键被按下过,我发现有时候系统onkeydown的响应比ontimer慢,ontimer是50毫秒响应一次,我把这个值改为500毫秒也会出现上面的问题(出于程序的效率考虑,不能比这个值再大了).
所以我想在触发ontimer的时候让系统查看一下有没有按键信息(Flag是不是为true),这样当按下按键时,就不会出现先判断Flag而后再响应onkeydown了,代码如下:
bool Flag = false;
void CbutDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
Flag = true;
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CbutDlg::OnTimer(UINT_PTR nIDEvent)
{
//能不能在这儿先调用onkeydown,再执行下面的代码?
//要确保在有键被按下时首先被onkeydown处理,即把Flag设为true
if (!Flag)
{
//do something
}
CDialog::OnTimer(nIDEvent);
}
liyinlei
2008-11-22
打赏
举报
回复
同1楼,只要在OnKeyDown里做相应处理就行了。
wltg2001
2008-11-22
打赏
举报
回复
同楼上,程序是由消息触发的/
xsc2001
2008-11-22
打赏
举报
回复
判断有没有按键消息不用在OnTimer里调用onkeydown,也用不着OnTimer呀,只要系统中的按键消息了onkeydown自然就响应了,也就能够即时知道。这样在onkeydown添加处理代码即可,一旦按键消息就通知你的系统即可。
node-v12.16.3-x86.msi
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践
中
,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
云计算基础课件—架构dr.pptx
云计算基础课件—架构dr.pptx
067ssm-jsp-mysql艺诚美业管理系统.zip(可运行源码+数据库文件+文档)
L文主要是对艺诚美业管理系统进行了介绍,包括研究的现状,还有涉及的开发背景,然后还对系统的设计目标进行了论述,还有系统的需求,以及整个的设计方案,对系统的设计以及实现,也都论述的比较细致,最后对艺诚美业管理系统进行了一些具体测试。 本文以JSP为开发技术,实现了一个艺诚美业管理系统。艺诚美业管理系统的主要使用者分为管理员;个人
中
心、会员管理、员工管理、员工打卡管理、技师预约管理、发型美容师管理、技师类型管理、套餐信息管理、套餐类型管理、套餐购买管理、会员充值管理、系统管理,员工;个人
中
心、员工打卡管理、技师预约管理,会员;个人
中
心、技师预约管理、套餐购买管理、会员充值管理,前台首页;首页、发型美容师、套餐信息、我的、跳转到后台等功能。通过这些功能模块的设计,基本上实现了整个艺诚美业管理系统的过程。 具体在系统设计上,采用了B/S的结构,同时,也使用JSP技术在动态页面上进行了设计,后台上采用Mysql数据库,是一个非常优秀的艺诚美业管理系统。 关键词 :艺诚美业管理系统;JSP技术;Mysql数据库;B/S结构
【微信小程序毕业设计】外卖点餐系统开发项目(源码+演示视频+说明).rar
【微信小程序毕业设计】外卖点餐系统开发项目(源码+演示视频+说明).rar 【项目技术】 微信小程序开发工具+java后端+mysql 【演示视频-编号:242】 https://pan.quark.cn/s/cb634e7c02b5 【实现功能】 有管理员,外卖员,餐厅,用户共四个角色。管理员功能有个人
中
心,外卖员管理,餐厅管理,用户管理,菜品分类管理,菜品信息管理,外卖订单管理,订单配送管理,订单评价管理,在线留言管理,系统管理等。外卖员,餐厅,用户都可以在微信小程序上面进行注册和登录操作。餐厅角色可以在微信小程序上面进行菜品的添加,修改,删除,查询操作,可以对用户的订单进行审核操作,查看订单配送状态和评价,可以查看投诉反馈和在线留言等。外卖员角色可以在微信小程序上面进行订单的抢单操作,查看订单配送和评价信息等。 用户角色可以在微信小程序上面进行菜品的查看和查询,对自己下的订单进行支付操作,查看订单配送和对订单评价,收藏菜品等操作。
oplog4j是java项目生成操作日志的工具,兼容spring(高分项目).zip
Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、高效的企业级应用。 1. Spring框架:Spring是一个轻量级的Java开发框架,提供了丰富的功能和模块,用于开发企业级应用。它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的Web框架,用于开发Web应用程序。它采用MVC(Model-View-Controller,模型-视图-控制器)的架构模式,将应用程序分为模型层、视图层和控制器层,提供了处理请求、渲染视图和管理流程的功能。 3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库进行交互。它提供了一种将数据库操作与Java对象映射起来的方式,避免了手动编写繁琐的SQL语句,并提供了事务管理和缓存等功能,简化了数据库访问的过程
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章