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

本文介绍了一种在对话框中重写Back键行为的方法,通过发送SHCMBM_OVERRIDEKEY消息并重写WM_HOTKEY响应,使得Back键在存在EditControl时可以作为删除键而非关闭对话框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个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,自己稍作修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值