Pergunta

Eu tenho o seguinte problema:

Abro a caixa de diálogo, abro o teclado SIP para preencher o formulário e minimizar o SIP. Então, quando fecho a caixa de diálogo atual e retorno à caixa de diálogo principal, o teclado SIP aparece novamente. Alguém sabe como eu poderia mostrar/ocultar o teclado SIP programaticamente ou melhor o que poderia ser feito para resolver o problema descrito. Depois que o usuário minimiza o teclado, ele não deve aparecer na tela na comutação de diálogo.

Obrigado!

Foi útil?

Solução

Nós usamos Shsippreference Para controlar a exibição do SIP em nossos aplicativos. Sei que funciona com o MFC e define o estado do SIP para a janela para que você possa defini -lo uma vez e saber que o estado SIP será restaurado no seu estado definido toda vez que a janela for mostrada.

Eu nunca ouvi falar de SipShowim, mas vi na página MSDN Linked:

O método padrão de mostrar e ocultar o SIP (SIPSHOWIM) exibe alguns problemas nas caixas de diálogo MFC.

Outras dicas

Você vai querer ligar SipShowim() em Coredll. Veja este artigo do MSDN:

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

Você pode usar o componente microsoft.windowsce.forms.inputPanel. Você pode mostrar/ocultar o SIP programaticamente usando a propriedade ativada. Há um componente InputPanel na caixa de ferramentas.

Há também um evento ativado para o InputPanel que você pode manipular. Você geralmente deseja mostrar o SIP em um evento getFocus de uma caixa de texto.

Você está usando o MFC?

O problema é que o estado SIP é por caixa de diálogo, não por aplicativo. Então, você precisa exibi -lo/esconder -o dentro de cada diálogo de forma independente.

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);
}
}

E você deve remover qualquer tela cheia ou chaves da barra de tarefas se não forem necessárias :)

E a outra coisa a usar:

 SHSipPreference(m_hWnd,SIP_UP); // SIP_DOWN

Ou até:

 HWND hwndCB = ::FindWindow(_T("SipWndClass"),_T(""));
      ::ShowWindow( hwndCB, SW_SHOW);
      hwndCB = ::FindWindow(_T("MS_SIPBUTTON"),NULL);
      ::ShowWindow( hwndCB, SW_SHOW);

Mas o último pode não ser tão padrão :) Ainda assim funciona. Tente eles.

... Em alguma outra caixa de diálogo, quero definir o layout do teclado como numérico, então adicionei a seguinte linha no construtor: sendMessage (em_setInputMode, 0, eim_numbers); No entanto, se eu remover esta linha, resolvo um problema e crie outro

GetLasterRor () é 6 (identificador inválido) ou 120 (não suportado). O EM_SETInputMode é suportado apenas em smartphones e os smartphones não têm SIPs. Ver http://msdn.microsoft.com/en-us/library/bb416452.aspx.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top