Вопрос

У меня возникла следующая проблема:

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

Спасибо!

Это было полезно?

Решение

Мы используем Ссылка на SHSipPerference для управления отображением SIP в наших приложениях.Я знаю, что это работает с MFC и устанавливает состояние SIP для окна, так что вы можете установить его один раз, и вы знаете, что состояние SIP будет восстанавливаться до заданного вами состояния каждый раз, когда отображается окно.

Я никогда не слышал о SipShowIM, но я видел на странице MSDN ссылку:

Стандартный метод отображения и скрытия SIP (SIPShowIM) показывает некоторые проблемы в диалоговых окнах MFC.

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

Ты захочешь позвонить Сипшоуим() в coredll.Смотрите эту статью MSDN:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top