注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

写着玩

Bob

 
 
 

日志

 
 
 
 

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

2009-12-19 01:39:09|  分类: Chrome |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

当我们键入字母或者文字开始时,那么类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  }

 

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


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/caimouse/archive/2008/09/16/2938740.aspx

  评论这张
 
阅读(210)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017