关于C++的消息 有没有高手
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C++的消息 有没有高手相关的知识,希望对你有一定的参考价值。
//屏蔽回车和ESC键退出
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == 0x1b) return TRUE;
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
//((CGridCtrl*)GetParent())->MoveCurCell(VK_RETURN);
::SendMessage(m_hWndParent, MSG_CURSOR_MOVE_KEY, VK_RETURN, 0);
return TRUE;
关于这段代码,1.怎么知道回车键的
wParam 是0x1b,2.sendmessage里面参数的意义
实际上 wParam 的值应该是ascii码。0x1b 是ESC的ascii码。
SendMessage 第一个参数是该对象的父对象。
第二个 光标移动
由于代码太少。我只能解释这些了。这个可能是子对象检测到了按键,然后通知父对象,父对象作出什么反映。 参考技术A 1·VK_RETURN 这个常量保存的回车的键值。0x1b是ESC的键值
2·SendMessage发送消息,参数第一个是窗口,第二个是消息号。后面两个根据消息不同,意义是不一样的,就是对应消息处理的参数。 参考技术B 怎么知道回车键的
键盘上的 每个键 都有对应的扫描码 当你按下一个键时 在内核中 会向 应用程序返回该扫描码 参考技术C 赞同bhtzu,另外
SendMessage函数调用后就直接到消息处理处理函数,如果不需要立即处理,可以用postmessage函数 参考技术D 看看
关于VB里的等待问题,求高手出现
vb里有没有办法这么做,程序执行到一个地方,需要等待外部变量a=1,才能继续执行下面的代码,否则等待,但等待超过某个时间后就跳出这个 Command2_Click(),不执行后面的代码
这个该怎么实现
我想要的是那种单纯的延时,延时的同时程序还能做其他事
Private Declare Function GetTickCount Lib "kernel32" () As Long这个该怎么用
dim i as long
do
if a=1 then
\'做你的事
exit do
end if
i = i + 1
if i > 9999999 then \'这个99999数字越大,等待时间越长,但具体时间和电脑的CPU性能有关。设置这个数的最大值就是i这个变量类型的最大值,可以把负数部分也利用来计数,这样32位的数字长度应该足够了
eixt sub \'跳出sub过程
end if
doevents \'防止程序假死
loop
这个做法简单,但是比较占用CPU,等待时间也不能确定,如果可以等待的时间太长就不合适了。
最好的做法,是看你的a=1这个过程是怎么获得的,在这个地方设置事件触发。比如,a=1是通过文本框获得的,就用文本框的text changed事件。如果是串口获得的,就用串口的接收事件。
如果确实没有事件可触发,就用Timer控件,定时去检测,每检测一次就计数加1,当计数超过你设定的值就认为超时。这个做法的缺点就是,如果timer检测间隙太密集,那效果和上面我说的循环一样,占用CPU,如果检测不够密集,那么实时性就差一点。不过Tmer控件可以精确计算等待时间。
延时的时候还要做其他事,纯VB下只有Timer控件可以帮你实现。否则就是多线程编程,需要靠API。那个gettickcount函数的参考 http://baike.baidu.com/view/1485502.htm 参考技术A 可以做到,用API函数Sleep执行等待(分片等待,例如要等待1分钟,就 Sleep 1秒 60次),用 DoEvents 语句响应用户操作,以免程序假死。
不过最好能做到事件响应,这样不占用CPU时间。 参考技术B 执行要等待的地方调用TIMER控件不可以吗?
在timer里面去确认外部变量,到时间后再呼叫 Command2_Click()就好了
以上是关于关于C++的消息 有没有高手的主要内容,如果未能解决你的问题,请参考以下文章
请教高手一个关于CMFCPropertyGridCtrl消息处理的问题