我有以下问题:
我打开对话框,打开 SIP 键盘以填写表格,然后最小化 SIP。然后,当我关闭当前对话框并返回主对话框时,SIP 键盘再次出现。有谁知道我如何以编程方式显示/隐藏 SIP 键盘或更好地解决所描述的问题。一旦用户最小化键盘,它就不会在对话切换时出现在屏幕上。
谢谢!
我有以下问题:
我打开对话框,打开 SIP 键盘以填写表格,然后最小化 SIP。然后,当我关闭当前对话框并返回主对话框时,SIP 键盘再次出现。有谁知道我如何以编程方式显示/隐藏 SIP 键盘或更好地解决所描述的问题。一旦用户最小化键盘,它就不会在对话切换时出现在屏幕上。
谢谢!
您需要在 coredll 中调用SipShowIM ()。请参阅此 MSDN 文章:
我们使用SHSipPreference来控制 SIP 在我们的应用程序中的显示。我知道它与 MFC 一起工作,它为窗口设置 SIP 的状态,因此您可以设置一次,并且您知道每次显示窗口时 SIP 状态都会恢复到您设置的状态。
我从未听说过 SipShowIM,但我确实在 MSDN 页面上看到了链接:
显示和隐藏 SIP (SIPShowIM) 的标准方法在 MFC 对话框中存在一些问题。
您可以使用 Microsoft.WindowsCE.Forms.InputPanel 组件。您可以使用 Enabled 属性以编程方式显示/隐藏 SIP。工具箱中有一个 InputPanel 组件。
您还可以处理 InputPanel 的 EnabledChanged 事件。您通常希望在文本框的 GetFocus 事件中显示 SIP。
你在使用 MFC 吗?
问题是 SIP 状态是每个对话,而不是每个应用程序。因此,您需要在每个对话框中独立显示/隐藏它。
void CAaa::OnActivate( UINT nState, CWnd* pWndOther, BOOL bMinimized )
{
if(nState == WA_ACTIVE || nState == WA_CLICKACTIVE)
{
SHINITDLGINFO shidi;
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_FULLSCREENNOMENUBAR|SHIDIF_SIPDOWN | SHFS_HIDETASKBAR;
shidi.hDlg = m_hWnd;
SHInitDialog(&shidi);
SHFullScreen(m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON |SHFS_HIDESTARTICON);
}
}
如果不需要,您应该删除任何全屏或任务栏键:)
还有另一件事要使用:
SHSipPreference(m_hWnd,SIP_UP); // SIP_DOWN
甚至:
HWND hwndCB = ::FindWindow(_T("SipWndClass"),_T(""));
::ShowWindow( hwndCB, SW_SHOW);
hwndCB = ::FindWindow(_T("MS_SIPBUTTON"),NULL);
::ShowWindow( hwndCB, SW_SHOW);
但后者可能不是那么标准:) 它仍然有效。试试看。
...在其他一些对话框中,我想将键盘布局设置为数字,所以我在构造函数中添加了以下行: SendMessage(EM_SETINPUTMODE, 0, EIM_NUMBERS); 但是,如果我删除此行,我会解决一个问题并创建另一个问题
GetLastError() 是 6(无效句柄)或 120(不支持)。EM_SETINPUTMODE 仅在 SmartPhone 上受支持,SmartPhone 没有 SIP。请参阅http://msdn.microsoft.com/en-us/library/bb416452.aspx。