Pocket PC Edit控件限制输入的怪问题

lordquest 2007-02-01 04:12:06
我子类化了一般的edit控件,
void CSIPEdit::OnEnSetfocus()
{
//::SendMessage(m_hWnd, EM_SETINPUTMODE, 0, MAKELPARAM(EIM_NUMBERS, 0));
SHSipPreference(m_hWnd, SIP_UP);
}

底下的软键盘是弹出来了,但默认是拼音输入键盘。我想切换到英文输入键盘,发送EM_SETINPUTMODE消息好像不行,无论是EIM_NUMBERS还是EIM_TEXTS
但在定义资源的时候,把这个控件Password的属性声明为true,就可以让软键盘只能用英文了,说明还是有办法实现这一点,不清楚在程序中应该怎么做(Password的属性字符会*化,可不是我所希望的)


另外,我在这个对话框中也想对输入进行限制,
BOOL CConfigDlg_FR::PreTranslateMessage(MSG* pMsg)
{
if ( pMsg->message == WM_CHAR || pMsg->message == WM_IME_CHAR)
{
if ( GetFocus() == GetDlgItem(IDC_EDIT1) ||
GetFocus() == GetDlgItem(IDC_EDIT2) ||
GetFocus() == GetDlgItem(IDC_EDIT3) ||
GetFocus() == GetDlgItem(IDC_EDIT4) )
{
TCHAR nChar = LOWORD(pMsg->wParam);
if ((nChar > 0 && nChar < 27) || // 允许控制字符如 Ctrl-C、Ctrl-V 等
(nChar >= _T('0') && nChar <= _T('9')) ||
nChar == _T('.') ||
nChar == _T('-') ||
nChar == _T('+') )
{
return CDialog::PreTranslateMessage(pMsg);
}
else
{
MessageBeep(1000);
return TRUE; //直接返回
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
很奇怪的是在 vs2005的模似器上是可用了,可是在真正的PocketPC(HP1950)上运行了,却不管用了,我测试的结果是在真PPC上,这里根本没有收到WM_CHAR或WM_IME_CHAR的消息,我也不明白是什么原因……
...全文
222 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
breeze_yin 2007-02-02
  • 打赏
  • 举报
回复
对于设置输入法的问题,首先通过SipEnumIM(pEnumIMProc)枚举系统支持的所有的输入法,pEnumIMProc是一个call back函数,其原形是:
int SipEnumIMProc(
IMENUMINFO* pIMInfo
);
这样可以通过参数pIMInfo得到系统所支持的所有的输入法。
然后通过SipSetCurrentIM设置当前输入法。

7,655

社区成员

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

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