荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店