有关memo控件截获VK_BACK消息

shinerise 2012-09-17 02:33:24
我再memo控件的OnKeyDown的消息处理里边加上了对vk_back的处理,是希望按下backspace按键时,我的memo控件不删除一个字符,我是这样写的:

void __fastcall TfrmLog::mmoCmdInputKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key == VK_BACK)
{
Key = 0;
}
}
但是发现,此处讲Key重新赋值为0后,memo控件还是处理了backspace事件,也就是memo的最后一个字符还是被删掉了。
各位大侠,我不想让backspace删字符,该如何处理呢?哪位大侠支支招吧。多谢。
...全文
219 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shinerise 2012-09-18
  • 打赏
  • 举报
回复
你似乎说反了,OnKeyDown能截获含扩展码的按键,比如shift建,alt键,但是OnKeyPress是截不到的。另外又查了一下,似乎是基本码除了在按键被按下时收到WM_KEY消息之外,还被后续翻译成了WM_CHAR消息。不知道是不是准确。[Quote=引用 3 楼 的回复:]

OnKeyDown和OnKeyUp只能截获一部分的按键。OnKeyPress才能截获更多的。
[/Quote]
ccrun.com 2012-09-17
  • 打赏
  • 举报
回复
OnKeyDown和OnKeyUp只能截获一部分的按键。OnKeyPress才能截获更多的。
shinerise 2012-09-17
  • 打赏
  • 举报
回复
在KeyPress里截获VK_BACK的确是可以。但是我很奇怪,为什么VK_UP\VK_DOWN之类的按键在KeyDown里截获后,就不会继续发给memo控件,而VK_BACK却一定要在KeyPress里来截获?而且奇怪的是,VK_UP/VK_DOWN,在KeyPress里是截获不到的,必须在KeyDown里截获。
我知道键盘有基本码和扩展码之分,BACK_SPACE是基本码,而UP/DOWN是扩展码。是不是Win在处理这些按键时,机制是不一样的?
缘中人 2012-09-17
  • 打赏
  • 举报
回复
写到keypress事件里就好了
void __fastcall TForm2::Memo2KeyPress(TObject *Sender, char &Key)
{
if( Key == VK_BACK )
Key = 0;
}

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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