como mostrar/ocultar gole no bolso pc
-
11-07-2019 - |
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!
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:
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.