荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Deny (Deny), 信区: Visual
标 题: [转载] 对话框的消息处理问题 cudo (转寄)
发信站: BBS 荔园晨风站 (Sat Dec 23 22:18:03 2000), 转信
【 以下文字转载自 Deny 的信箱 】
【 原文由 denick.bbs@smth.org 所发表 】
发信人: Variant (*****---SOCKET), 信区: VisualC
标 题: Re: 我的dialog为什么不响应右箭头和下箭头键
发信站: BBS 水木清华站 (Mon Oct 23 13:27:58 2000)
1。如果你要自己响应VK_RIGHT和VK_DOWN的VK_KEYDOWN消息,可以在dialog类的
PreTranslateMessage函数中截取该消息并作相应的处理。此处用户可以获得大多数
消息的预先控制权。
2。由于dialog类内部的消息循环机制可能隐含地抑制了一些消息的发送,所以
会造成用户自己派生的消息循环没有被系统调用。具体情况你可以自己debug去查。
3。测试:
在对话框中放一个按钮,在它的单击相应函数中分别用如下语句测试:
this->SendMessage(WM_KEYDOWN,VK_DOWN,0);
this->PostMessage(WM_KEYDOWN,VK_DOWN,0);
然后在WM_KEYDOWN中检测VK_DOWN,如下:
if(nChar == VK_DOWN)
AfxMessageBox(" down ");
编译执行后可以看到当SendMessage时有messagebox弹出,而PostMessage时没有
messagebox弹出。这是因为SendMessage没有经过PreTranslateMessage,它是直接
通过消息循环调用该消息的响应函数,而PostMessage则是将消息发送到进程的消息队列
中去,这样消息就要经过PreTranslateMessage的处理。
4。结论:
dialog在自己的实现过程中根据自己的特点抑制了部分消息的发送,用户要自己控制
这些消息时,可以在TranslateMessage中截取并作处理。
【 在 tul (??) 的大作中提到: 】
: 一个最简单的dialog-based程序,用MFC生成,dialog上没有任何控件。
: 可是OnKeyDown()对于VK_RIGHT和VK_DOWN不响应。就好像没有接收到
: 一样。可是VK_LEFT和VK_UP就没有问题,哪位大虾指点一下。
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.64.177]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.119]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店