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

这个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;

 

基于WTL的框架编写,如果你使用原始SDK,自己稍作修改

你可能感兴趣的:(Window,Mobile开发,windows,mobile,平台,dialog,框架,os)