Smartphone上的Edit控件的Back问题

northeaster 2006-12-28 02:25:54
大家好,我正在用VS2005开发一个基于Smartphone 2003/WM 5 for Smartphone的游戏。
现在遇到了这样一个难题,我想很多人都遇到过吧。

Smartphone键盘上面的“←”键。实际上发出的消息是“VK_ESCAPE”。这是Smartphone的特殊性,所以Edit控件就遇到了麻烦:“←”键不起作用。于是MSDN上给了这样的方案:用SHCMBM_OVERRIDEKEY消息把VK_TBACK注册为热键,然后用SHSendBackToFocusWindow达到让Edit空间删除最后一个字符的办法。

但是我现在的情况比较复杂,就是我的程序是只有主窗口和Edit控件,没有菜单。那么上面的办法对我来说就不起作用了。

我试过子类化Edit控件的窗口处理函数,想自己处理“VK_TBACK”按键事件,能做到删除控件中最后一个字符的功能,但是,这种办法在输入法打开的情况下实效了。我想删除输入法的候选字符的最后一个,但是却总是把屏幕上的最后一个字符删掉。

请问大家有没有什么办法?

万分感谢。
...全文
237 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang1994 2007-01-25
  • 打赏
  • 举报
回复
楼上说的应该没错。
yanse822 2007-01-25
  • 打赏
  • 举报
回复
LPARAM lparam = MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY,
SHMBOF_NODEFAULT | SHMBOF_NOTIFY);
::SendMessage(SHFindMenuBar(m_hWnd), SHCMBM_OVERRIDEKEY, VK_TBACK, lparam);
先发送这个消息。然后用下边这个方法处理就可以了
BOOL CChatDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class

if (GetFocus()== GetDlgItem(IDC_EDIT1)) //EDIT获得焦点
{

switch(pMsg->message)
{
case WM_HOTKEY:

if (VK_TBACK == HIWORD(pMsg->lParam) && (0 != (MOD_KEYUP & LOWORD(pMsg->lParam))))
SHSendBackToFocusWindow(pMsg->message, pMsg->wParam, pMsg->lParam);
}
}
return CDialog::PreTranslateMessage(pMsg);
}

7,657

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧