Как показать / скрыть SIP на КПК

У меня такая проблема:

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

Спасибо!

Я выяснил, что вызывает такое поведение. В другом диалоговом окне я хочу установить числовую раскладку клавиатуры, поэтому я добавил в конструктор следующую строку: SendMessage (EM_SETINPUTMODE, 0, EIM_NUMBERS); Однако, если я удалю эту строку, я решу одну проблему и создам другую ...

Niko Gamulin 27.11.2008 17:51

Строка, которую вы удалили, на самом деле не работала, верно (я имею в виду, что она не подтягивала клавиатуру в числовом режиме, верно)?

MusiGenesis 27.11.2008 18:25

@ Нико: Привет, у тебя есть ответы на свой вопрос ... он мне тоже нужен ... пожалуйста, дайте мне знать ..

Naruto 01.10.2009 09:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
3
6 969
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы можете использовать компонент Microsoft.WindowsCE.Forms.InputPanel. Вы можете отобразить / скрыть SIP программно, используя свойство Enabled. На панели инструментов есть компонент InputPanel.

Существует также событие EnabledChanged для InputPanel, которое вы можете обработать. Обычно вы хотите показать SIP в событии GetFocus текстового поля.

Пишу приложение на C++

Niko Gamulin 27.11.2008 17:41

Вы захотите вызвать SipShowIM () в coredll. См. Эту статью MSDN:

http://msdn.microsoft.com/en-us/library/ms838341.aspx

Ответ принят как подходящий

Мы используем 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.

MusiGenesis 28.11.2008 02:41

SHSipPreference - это Windows CE 3.0 и более поздние версии, SIPShowIM - это Windows CE OS 2.10 и более поздних версий, см. msdn.microsoft.com/en-us/library/ms941818.aspx Mine выглядит как лучший API для использования и новее :) SIPShowIM устанавливает состояние независимо от того, в каком окне, SHSipPreference зависит от окна и закрепляется.

Shane Powell 28.11.2008 22:25

SipShowIM: «Приложение ДОЛЖНО вызывать эту функцию для отображения панели ввода». Дело закрыто. :)

MusiGenesis 28.11.2008 23:34

Возможно, это самые непонятные с профессиональной точки зрения дискуссии, в которых я когда-либо участвовал. :)

MusiGenesis 28.11.2008 23:35

Каждому свой ... Теперь Нико и другие могут выбрать любой API, который они хотят использовать, на основе осознанного выбора, естественно, SHSipPreference :)

Shane Powell 30.11.2008 20:52

Да, теперь Нико может свободно использовать SHSipPreference и быть брошенным в огонь ада на всю вечность или использовать SipShowIM и завоевать прибыльный рынок приложений WinCE 2.10. :)

MusiGenesis 30.11.2008 23:22

Вы используете 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.

Другие вопросы по теме