Smartphone后退键的规则

  1. 如果当前窗口不是一个DialogBox或是没有EditBox,当按下后退键时,应该显示上一个窗口。但是当前的窗口不应被销毁,而只是被前一个窗口覆盖。
  2. 如果当前窗口是一个MessageBox或者是一个没有EditBox的模态Dialog,当按下后退键时,应该关闭该对话框。对于MessageBox,对话框的返回值可能是 IDNO, IDCANCEL或IDOK;对于模态对话框,对话框会得到一个ID值为IDCANCEL的WM_COMMAND的消息。
  3. 如果当前的窗口含有EditBox,当按下后退键时,应该删除EditBox中的最后一个字符。
 对于第三种情况,系统并不会自动处理,需要我们自己做一点工作。
首先,我们需要向MenuBar发送一个SHCMBM_OVERRIDEKEY消息,来通知Menubar我们要改变后退键的行为。
SHCMBM_OVERRIDEKEY消息的wParam参数是要改变行为的键值,如下表所示:
Key Meaning
VK_TBACK Back button
VK_TSOFT1 Left SoftKeyBar button
VK_TSOFT2 Right SoftKeyBar button
VK_TVOLUMEUP Up volume button
VK_TVOLUMEDOWN Down volume button
VK_TRECORD Record button
 SHCMBM_OVERRIDEKEY消息的lParam参数是我们要改变的行为,其中lParam的低字节是掩码,高字节是值。
例如,我们要把后退键的缺省行为去掉,并希望当按下后退键时,会向当前窗口发送WM_HOTKEY的消息,那么,我们可以这么做:
SendMessage (SHFindMenuBar (hWnd), SHCMBM_OVERRIDEKEY, VK_TBACK, 
             MAKELPARAM (SHMBOF_NODEFAULT | SHMBOF_NOTIFY, 
                         SHMBOF_NODEFAULT | SHMBOF_NOTIFY));
SHMBOF_NODEFAULT是去掉后退键的缺省行为,SHMBOF_NOTIFY是要向窗口发送键按下的消息。
MAKELPARAM宏的第一个参数是低字,第二个参数是高字。
如果我们只是要去掉后退键的缺省行为,而不需要后退键向窗口发送WM_HOTKEY的消息,可以这么做:
SendMessage (SHFindMenuBar (hWnd), SHCMBM_OVERRIDEKEY, VK_TBACK,
             MAKELPARAM (SHMBOF_NODEFAULT | SHMBOF_NOTIFY,
                         SHMBOF_NODEFAULT));
如果要恢复后退键的缺省行为,可以这么做:
SendMessage (SHFindMenuBar (hWnd), SHCMBM_OVERRIDEKEY, VK_TBACK,
             MAKELPARAM (SHMBOF_NODEFAULT | SHMBOF_NOTIFY,
                         0));
窗口收到的WM_HOTKEY消息中,wParam表示按下的键,如下表所示:
Key Value
VK_TSOFT1 0
VK_TSOFT2 1
VK_TBACK 2
VK_TVOLUMEUP 3
VK_TVOLUMEDOWN 4
VK_TRECORD 5
lParam也含有按下键的值,但是有所区别。lParam中,高字表示按下的键值,低字则表示按下值的其他标志,对于Smartphone有用的是标志是MOD_KEYUP,表示键已经被释放了。
当我们收到WM_HOTKEY消息时,需要处理删除字符的操作,此时,不需要我们自己写代码完成,只需要调用系统提供的一个函数即可:
void SHSendBackToFocusWindow (UINT uMsg, WPARAM wp, LPARAM lp);
所以,我们处理WM_HOTKEY消息的代码可以这么写:
case WM_HOTKEY:
    if (HIWORD (lParam) == VK_TBACK)
        SHSendBackToFocusWindow (wMsg, wParam, lParam);
这样,就会删除最后的字符了。
最后一点,如果MenuBar被销毁,则改变后退键的行为会自动终止,不需要再写恢复代码。
文章的原始URL可以看:
[url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/win_ce/html/pwc_TheBackButtonandOtherInterestingButtons.asp[/url]
让后退键执行缺省的行为也可以执行这个函数:
void SHNavigateBack(void);
如果安装了WM5 for smartphone的SDK,有个例子可以参考:
C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Smartphone SDK\Samples\CPP\Win32\Back\back.sln 
分享至
一键收藏,随时查看,分享好友!
0人
了这篇文章
类别:未分类┆阅读( 0)┆评论( 0) ┆ 返回博主首页┆ 返回博客首页
上一篇 Image loading with Imaging API 下一篇 获取Windows Mobile手机的手机号码

相关文章

  • Windows Mobile 5.0中为开发人员提供的新功能
  • Windows Mobile 下一代版本"Crossbow&q..
  • Windows Mobile 开发资源(精)
  • Windows Mobile 7.0最新消息!!
  • SP版本Windows Mobile Crossbow简短体验

职位推荐

  • Java架构师
  • 中高级前端工程师
  • PHP开发工程师
  • 后端开发
  • 前端开发工程师/前端设计/网站制作

文章评论

 
[1楼]       [匿名]figo  回复
2007-12-28 09:47:14
学习了 回去好好研究下

 

发表评论            

昵  称:
登录  快速注册
验证码:

点击图片可刷新验证码请点击后输入验证码博客过2级,无需填写验证码

内  容:

同时赞一个

每日博报 精彩不止一点关闭

你可能感兴趣的:(windows,职场,mobile,休闲,Smartphone)