WEB开发网
开发学院手机开发Windows Mobile 开发 Windows Mobile平台上重写Back健的行为 阅读

Windows Mobile平台上重写Back健的行为

 2010-08-22 12:56:00 来源:WEB开发网   
核心提示:这个Back健的处理很奇怪,如果默认不做任何处理,Windows Mobile平台上重写Back健的行为,即使当前Dialog上存在一个Edit Control,它还是不会充当回退删除健的角色,如下表所示:KeyMeaningVK_TBACKBack buttonVK_TSOFT1Left SoftKeyBar but

这个Back健的处理很奇怪,如果默认不做任何处理,即使当前Dialog上存在一个Edit Control,它还是不会充当回退删除健的角色,还是会关闭当前对话框,回退到上一个。解决的办法也很简单按Back健时,OS会抛出一个WM_HOTKEY的消息出来,我们可以捕获这个消息重写Back健的行为

代码如下:

在OnInitDialog时 发送SHCMBM_OVERRIDEKEY 重写VK_BACK的行为。

HWND hwndMenuBar = SHFindMenuBar(m_hWnd);

SendMessage(hwndMenuBar, SHCMBM_OVERRIDEKEY, VK_TBACK, MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, SHMBOF_NODEFAULT | SHMBOF_NOTIFY));

然后在Dailog响应 WM_HOTKEY时进行如下处理:

LRESULT CMyDlg::OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)

{

if(VK_TBACK == HIWORD(lParam))

{

bHandled = true;

SHSendBackToFocusWindow(uMsg, wParam, lParam);

}

return 0;

}

如果当前窗口不是一个DialogBox或是没有EditBox,当按下后退键时,应该显示上一个窗口。但是当前的窗口不应被销毁,而只是被前一个窗口覆盖。

如果当前窗口是一个MessageBox或者是一个没有EditBox的模态Dialog,当按下后退键时,应该关闭该对话框。对于 MessageBox,对话框的返回值可能是 IDNO, IDCANCEL或IDOK;对于模态对话框,对话框会得到一个ID值为IDCANCEL的WM_COMMAND的消息。

如果当前的窗口含有EditBox,当按下后退键时,应该删除EditBox中的最后一个字符。

对于第三种情况,系统并不会自动处理,需要我们自己做一点工作。

首先,我们需要向MenuBar发送一个SHCMBM_OVERRIDEKEY消息,来通知Menubar我们要改变后退键的行为。

SHCMBM_OVERRIDEKEY消息的wParam参数是要改变行为的键值,如下表所示:

KeyMeaning

VK_TBACKBack button

VK_TSOFT1Left SoftKeyBar button

VK_TSOFT2Right SoftKeyBar button

VK_TVOLUMEUPUp volume button

VK_TVOLUMEDOWNDown volume button

VK_TRECORDRecord button

SHCMBM_OVERRIDEKEY消息的lParam参数是我们要改变的行为,其中lParam的低字节是掩码,高字节是值。

1 2 3 4  下一页

Tags:Windows Mobile 平台

编辑录入:coldstar [复制链接] [打 印]
赞助商链接