как показать / скрыть SIP на Pocket PC - PullRequest
3 голосов
/ 27 ноября 2008

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

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

Спасибо!

Ответы [ 5 ]

2 голосов
/ 27 ноября 2008

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

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

1 голос
/ 27 ноября 2008

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

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

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

0 голосов
/ 27 декабря 2010

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

GetLastError () имеет значение 6 (неверный дескриптор) или 120 (не поддерживается). EM_SETINPUTMODE поддерживается только на смартфонах, а на смартфонах нет SIP. Смотри http://msdn.microsoft.com/en-us/library/bb416452.aspx.

0 голосов
/ 13 января 2009

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

Но последнее может быть не таким стандартным :) Все же это работает. Попробуйте их.

0 голосов
/ 27 ноября 2008

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

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

...