谷歌浏览器的源码分析(7)

系统 2244 0
 

当我们键入字母或者文字开始时,那么类 AutocompleteEdit 就会从窗口消息里获取到相应的字母或者文字,然后根据输入的信息到本地或者网络上保存的信息库里查找相应的输入提示,这就是自动完成的实现。下面就来先分析输入的函数:

#001   void AutocompleteEdit::OnChar(TCHAR ch, UINT repeat_count, UINT flags) {

#002     // Don't let alt-enter beep.   Not sure this is necessary, as the standard

#003     // alt-enter will hit DiscardWMSysChar() and get thrown away, and

#004     // ctrl-alt-enter doesn't seem to reach here for some reason?   At least not on

#005     // my system... still, this is harmless and maybe necessary in other locales.

 

下面把 alt-enter 组合键消息过滤掉。

#006     if (ch == VK_RETURN && (flags & KF_ALTDOWN))

#007       return;

#008  

#009     // Escape is processed in OnKeyDown.   Don't let any WM_CHAR messages propagate

#010     // as we don't want the RichEdit to do anything funky.

 

下面把 ESC 键的消息过滤掉。

#011     if (ch == VK_ESCAPE && !(flags & KF_ALTDOWN))

#012       return;

#013  

 

下面把 TAB 键的消息过滤掉。

#014     if (ch == VK_TAB) {

#015       // Don't add tabs to the input.

#016       return;

#017     }

#018  

 

这里处理其它有用的按键消息。

#019     HandleKeystroke(GetCurrentMessage()->message, ch, repeat_count, flags);

#020   }

 

AutocompleteEdit::OnChar 函数是 WTL 里的 WM_CHAR 消息处理,当用户键入字母时就会触发这个消息。这个函数先跳过几个不要处理的消息,最后调用函数 HandleKeystroke 来处理,如下:

#001   void AutocompleteEdit::HandleKeystroke(UINT message, TCHAR key,

#002                                          UINT repeat_count, UINT flags) {

 

冻结 RichEdit 的更新。

#003     ScopedFreeze freeze(this, GetTextObjectModel());

 

处理消息变化前的动作。

#004     OnBeforePossibleChange();

 

处理消息

#005     DefWindowProc(message, key, MAKELPARAM(repeat_count, flags));

 

处理消息变化后的动作。

#006     OnAfterPossibleChange();

#007   }

 

在这里为什么要进行窗口的消息冻结呢?又为什么需要进行消息处理和消息变化后处理呢?下一次再告诉你。

谷歌浏览器的源码分析(7)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论