科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在WinCE程序开发中使用软件输入面板

在WinCE程序开发中使用软件输入面板

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

软件输入面板是每个装备了WinCE系统的移动平台的一个基本功能。

作者:梁旗军 李佳凯 樊鑫 来源:计算机与信息技术 2007年11月21日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
使用Shell函数

  如果你决定使用基于aygshell的函数,SHSipPreference也会为你完成相似的任务。和SipShowIM一样,这个API将会显示和隐藏输入面板。它的最后一个参数定义了作什么,可以请求显示或隐藏输入面板,马上隐藏(因为操作系统在一个常规事例里将会为此设置一个计时器)或者放弃所有的等待中的请求。SHSipInfo允许你作和SipXXX函数一样的操作。

  通常,你可以用以上所有的API来响应WM_SETTINGCHAANGE或WM_CREATE消息。根据文档,当你使用SHSipInfo来处理WM_SETTINGCHANGE消息的时候要特别小心。这有几个原因:第一,SIP的改变可能导致shell来发送WM_SETTINGCHANGE消息,所以当你在你的处理函数里调用的时候要小心无限循环;第二,SHSipInfo将会和Device.exe以及输入面板线程相互作用,因此将会占据100ms左右的时间。这将导致WM_SETTINGCHANGE消息发送给所有运行的程序,所以系统将会因此而失去响应一段时间。将lParam值同时和WM_SETTINGCHANGE传递将会避免这样的延迟。

  当说到shell函数时,有些Windows Mobile平台上的函数会非常有用也可能会变得让你头痛。这些包括SHInputDialog,SHFullScreen或者类似的调用。另外,SHHandleWMActivate和SHHandleWMSettingChange会让你充分享受MFC程序中键盘自动弹出的乐趣,因为它们被用在合适的消息句柄的CDialog和CFrameWnd类中。如果你不想拥有缺省的行为,你可以重载OnActivate或OnSettingChange句柄。
 
  自定义控制

  如果你想支持一种智能化的输入框类的行为--每次进行输入时键盘自动弹出,然后当输入焦点从输入框移开后键盘隐藏,那么需要对WM_SETFOCUS和WM_KILLFOCUS进行处理。下面的代码可以帮助你:

void CSipEdit::OnSetFocus(CWnd* pOldWnd)
{
 CEdit::OnSetFocus(pOldWnd);

 SHSipPreference(m_hWnd,SIP_UP);
}

void CSipEdit::OnKillFocus(CWnd* pNewWnd)
{
 CEdit::OnKillFocus(pNewWnd);

 SHSipPreference(m_hWnd,SIP_FORCEDOWN);
}

  设定SIP位置

  下面谈谈如何移动SIP到屏幕上的某个位置。SipSetDefaultRect将会改变缺省的SIP的举行,但是它不会立即生效,除非你重新选择输入法:

void CSIPDemoDlg::OnButtonMove()
{
 SIPINFO SipInfo;
 memset(&SipInfo,0,sizeof(SipInfo));
 SipInfo.cbSize=sizeof(SIPINFO);
 BOOL bRes = SipGetInfo(&SipInfo);
 if ( bRes )
 {
  CRect rc(SipInfo.rcSipRect);
  rc.OffsetRect(0,-20);
  SipSetDefaultRect(&rc);

  CLSID clsid;
  if ( SipGetCurrentIM(&clsid) )
  {
   SipSetCurrentIM(&clsid);
  }
  SipShowIM(SIPF_ON);
 }
}

  上面的代码告诉你如何在屏幕上移动SIP的位置。这在你想在屏幕低端放置一些控件的时候会非常有用。当然这样不符合微软的Pocket PC的GUI设计标准,但是有些时候你也没有其他的选择。

  如果你可以获取窗口的句柄来控制窗口的样式,比如:

long lStyle=GetWindowLong(hwndSIP,GWL_STYLE);
lStyle |= WS_CAPTION|WS_SYSMENU;
SetWindowLong(hwndSIP,GWL_STYLE,lStyle);

  结束语

  我们已经讨论了在WindowsCE操作系统上对SIP进行管理的若干方面,希望这些能够帮助你的程序成为用户眼里的赢家。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章