как показать / скрыть SIP на Pocket PC
-
11-07-2019 - |
Вопрос
У меня возникла следующая проблема:
Я открываю диалоговое окно, открываю SIP-клавиатуру, чтобы заполнить форму, а затем сворачиваю SIP.Затем, когда я закрываю текущее диалоговое окно и возвращаюсь к основному диалоговому окну, SIP-клавиатура появляется снова.Кто-нибудь знает, как я мог бы программно показать / скрыть SIP-клавиатуру или лучше, что можно было бы сделать для решения описанной проблемы.Как только пользователь сворачивает клавиатуру, она не должна появляться на экране при переключении диалогового окна.
Спасибо!
Решение
Мы используем Ссылка на SHSipPerference для управления отображением SIP в наших приложениях.Я знаю, что это работает с MFC и устанавливает состояние SIP для окна, так что вы можете установить его один раз, и вы знаете, что состояние SIP будет восстанавливаться до заданного вами состояния каждый раз, когда отображается окно.
Я никогда не слышал о SipShowIM, но я видел на странице MSDN ссылку:
Стандартный метод отображения и скрытия SIP (SIPShowIM) показывает некоторые проблемы в диалоговых окнах MFC.
Другие советы
Ты захочешь позвонить Сипшоуим() в coredll.Смотрите эту статью MSDN:
Вы можете использовать Microsoft.WindowsCE.Forms.Компонент InputPanel.Вы можете показать / скрыть SIP программно, используя свойство Enabled.В панели инструментов есть компонент InputPanel.
Существует также событие EnabledChanged для InputPanel, которое вы можете обработать.Обычно вы хотите показать SIP при событии GetFocus текстового поля.
Используете ли вы 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);
Но последнее может быть не таким стандартным :) Тем не менее, это работает.Попробуйте их.
...В каком-то другом диалоговом окне я хочу установить раскладку клавиатуры на числовую, поэтому я добавил следующую строку в конструктор:Отправленное сообщение(EM_SETINPUTMODE, 0, EIM_NUMBERS);Однако, если я удалю эту строку , я решу одну проблему и создам другую
GetLastError() равен либо 6 (недопустимый дескриптор), либо 120 (не поддерживается).EM_SETINPUTMODE поддерживается только на смартфонах, а в смартфонах нет SIPs.Видишь http://msdn.microsoft.com/en-us/library/bb416452.aspx.