У меня такая проблема:
Я открываю диалоговое окно, открываю SIP-клавиатуру, чтобы заполнить форму, а затем сворачиваю SIP. Затем, когда я закрываю текущий диалог и возвращаюсь к основному диалогу, снова появляется SIP-клавиатура. Кто-нибудь знает, как я могу программно показать / скрыть SIP-клавиатуру или лучше, что можно сделать для решения описанной проблемы. После того, как пользователь свернет клавиатуру, она не должна появляться на экране при переключении диалогов.
Спасибо!
Строка, которую вы удалили, на самом деле не работала, верно (я имею в виду, что она не подтягивала клавиатуру в числовом режиме, верно)?
@ Нико: Привет, у тебя есть ответы на свой вопрос ... он мне тоже нужен ... пожалуйста, дайте мне знать ..





Вы можете использовать компонент Microsoft.WindowsCE.Forms.InputPanel. Вы можете отобразить / скрыть SIP программно, используя свойство Enabled. На панели инструментов есть компонент InputPanel.
Существует также событие EnabledChanged для InputPanel, которое вы можете обработать. Обычно вы хотите показать SIP в событии GetFocus текстового поля.
Пишу приложение на C++
Вы захотите вызвать SipShowIM () в coredll. См. Эту статью MSDN:
Мы используем SHSipPreference для управления отображением SIP в наших приложениях. Я знаю, что он работает с MFC и устанавливает состояние SIP для окна, поэтому вы можете установить его один раз, и вы знаете, что состояние SIP будет восстанавливаться до вашего установленного состояния каждый раз, когда отображается окно.
Я никогда не слышал о SipShowIM, но видел на странице MSDN ссылку:
The standard method of showing and hiding the SIP (SIPShowIM) exhibits some problems in MFC dialogs.
Я никогда не слышал о SHSipPreference. :) Судя по поддержке версий, выглядит очень старым. Я не иду и близко к диалогам MFC, но у меня никогда не было проблем с SipShowIM в C# /. NET CF.
SHSipPreference - это Windows CE 3.0 и более поздние версии, SIPShowIM - это Windows CE OS 2.10 и более поздних версий, см. msdn.microsoft.com/en-us/library/ms941818.aspx Mine выглядит как лучший API для использования и новее :) SIPShowIM устанавливает состояние независимо от того, в каком окне, SHSipPreference зависит от окна и закрепляется.
SipShowIM: «Приложение ДОЛЖНО вызывать эту функцию для отображения панели ввода». Дело закрыто. :)
Возможно, это самые непонятные с профессиональной точки зрения дискуссии, в которых я когда-либо участвовал. :)
Каждому свой ... Теперь Нико и другие могут выбрать любой API, который они хотят использовать, на основе осознанного выбора, естественно, SHSipPreference :)
Да, теперь Нико может свободно использовать SHSipPreference и быть брошенным в огонь ада на всю вечность или использовать SipShowIM и завоевать прибыльный рынок приложений WinCE 2.10. :)
Вы используете 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);
Но последнее могло быть не таким уж стандартным :) Тем не менее, работает. Попробовать их.
...In some other dialog I want to set the keyboard layout to numeric, so I added the following line in the constructor: SendMessage(EM_SETINPUTMODE, 0, EIM_NUMBERS); However if I remove this line I solve one issue and create another one
GetLastError () имеет значение 6 (недопустимый дескриптор) или 120 (не поддерживается). EM_SETINPUTMODE поддерживается только на смартфонах, а у смартфонов нет SIP. См. http://msdn.microsoft.com/en-us/library/bb416452.aspx.
Я выяснил, что вызывает такое поведение. В другом диалоговом окне я хочу установить числовую раскладку клавиатуры, поэтому я добавил в конструктор следующую строку: SendMessage (EM_SETINPUTMODE, 0, EIM_NUMBERS); Однако, если я удалю эту строку, я решу одну проблему и создам другую ...