一个关于Hook消息的问题

layerr 2002-10-22 11:30:35
我在写一个控件:
需要监控一个文本框的KeyDown事件,当这个文本框有键按下时,控件就根据文本框当前的内容发生相应的动作。

我是用Hook函数实现的:
在控件的生成函数中安置了Hook:

hMsgHook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)GetMsgProc, NULL, GetCurrentThreadId() );

然后再重写了GetMsgProc函数:
LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam )
{
LRESULT lReturn=0;
MSG* cwMessage;
cwMessage=(MSG *)lParam;
if(cwMessage->hwnd==hRelaEdit && cwMessage->message == WM_KEYDOWN)//如果是在那个RelaEdit文本框中发生的KeyDown事件的话
CallMyProc(); //处理这件事情的函数
}

程序可以运行,但有一个问题:
CallMyProc()函数中需要去读那个文本框的当前Text值,但由于处理KeyDown的CallMyProc函数发生在文本框接收到那个按下键值之前,这样就造成了一个滞后的问题了。
举例说明:
如文本框中已有字符“ab”,再在文本框中按下“c”键后,系统的处理过程是:
判断文本框中有键按下,发生KeyDown消息,而且这个消息的Handle是指定的文本框,于是就执行CallMyProc()函数。
CallMyProc()函数执行时,先读文本框的值,注意:::这时按下“c”键的消息还未传到文本框来,因此文本框的文本仍然是“ab”:::::而我所希望的是按“abc”来处理。

也就是,KeyDown消息是CallMyProc先处理,文本框后处理,于是,我的问题就是:

如何让文本框先接收到这个KeyDown消息,再交给CallMyProc来处理。
...全文
31 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yphy 2002-11-18
  • 打赏
  • 举报
回复
难道不能用BCB FormKeyDown事件吗? 我就做过类似的问题,有时不要把问题搞得太复杂,要善于站在巨人的肩膀上
yphy 2002-11-18
  • 打赏
  • 举报
回复
up

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧