C#中键盘事件在WndProc函数之前的处理流程

窗体和控件在WndProc处理函数处理键盘消息之前,都要进行预处理。本文就介绍在键盘事件被WndProc处理之前所经过的处理过程。

以下介绍是文本描述的示意介绍,和真正的代码流程(TranslateAcceleratorTranslateMessageDispatchMessage处理)有区别,仅仅便于理解。

在一个私有函数中进行消息的内部处理,流程如下:

internal PreProcessControlMessageInternal() { if(是WM_KEYDOWN 或者是 WM_SYSKEYDOWN消息) { 触发PreviewKeyDown; if (e.IsInputKey) { 触发KeyDown事件; return; //不再进行PreProcessMessage预处理 } } PreProcessMessage虚函数预处理; }

有关PreProcessMessage虚函数预处理详细流程:

internal PreProcessMessage() { if(是WM_KEYDOWN 或者是 WM_SYSKEYDOWN消息) { if (ProcessCmdKey 虚函数处理(如快捷键或菜单快捷键)) { return; } if (IsInputKey 虚函数判断是否是常规字符) { 触发KeyDown事件; return; } if(!ProcessDialogKey 虚函数处理导航键(Esc、Tab、回车键或箭头键)) { 触发KeyDown事件; return; } } if(是WM_CHAR 或者是 WM_SYSCHAR消息) { if (IsInputChar 虚函数判断是否是普通字符) { 触发KeyDown事件; return; } if(!ProcessDialogChar 虚函数处理助记符(如按钮上的“确定(&O)”)) { 触发KeyDown事件; return; } } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值