Domanda

Ho il seguente problema:

Apro la finestra di dialogo, apro la tastiera SIP per riempire il modulo e quindi minimizzare il SIP. Quindi, quando chiudo la finestra di dialogo corrente e torno alla finestra di dialogo principale, viene nuovamente visualizzata la tastiera SIP. Qualcuno sa come posso mostrare / nascondere la tastiera SIP programmaticamente o meglio cosa si potrebbe fare per risolvere il problema descritto. Una volta che l'utente minimizza la tastiera, questa non dovrebbe apparire sullo schermo quando si cambia finestra.

Grazie!

È stato utile?

Soluzione

Utilizziamo SHSipPreference per controllare la visualizzazione del SIP in le nostre applicazioni. So che funziona con MFC e imposta lo stato del SIP per la finestra in modo da poterlo impostare una volta e sai che lo stato SIP verrà ripristinato al tuo stato impostato ogni volta che viene visualizzata la finestra.

Non ho mai sentito parlare di SipShowIM ma ho visto sulla pagina MSDN collegata:

  

Il metodo standard di mostrare e   nascondere le mostre SIP (SIPShowIM)   alcuni problemi nelle finestre di dialogo MFC.

Altri suggerimenti

Ti consigliamo di chiamare SipShowIM () in coredll. Vedi questo articolo MSDN:

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

È possibile utilizzare il componente Microsoft.WindowsCE.Forms.InputPanel. È possibile mostrare / nascondere il SIP a livello di codice utilizzando la proprietà Enabled. C'è un componente InputPanel nella casella degli strumenti.

Esiste anche un evento EnabledChanged per InputPanel che puoi gestire. Di solito si desidera mostrare il SIP in un evento GetFocus di una casella di testo.

Stai usando MFC?

Il problema è che lo stato SIP è per finestra di dialogo, non per applicazione. Quindi è necessario mostrarlo / nasconderlo all'interno di ogni finestra di dialogo in modo indipendente.

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 se necessario non rimuovere le chiavi a schermo intero o sulla barra delle applicazioni :)

E l'altra cosa da usare:

 SHSipPreference(m_hWnd,SIP_UP); // SIP_DOWN

O anche:

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

Ma quest'ultimo potrebbe non essere così standard :) Funziona comunque. Provali.

  

... In qualche altra finestra di dialogo voglio impostare il layout della tastiera su numerico,   così ho aggiunto la seguente riga nel costruttore:   SendMessage (EM_SETINPUTMODE, 0, EIM_NUMBERS); Tuttavia, se rimuovo questo   riga risolvo un problema e ne creo un altro

GetLastError () è 6 (handle non valido) o 120 (non supportato). EM_SETINPUTMODE è supportato solo su SmartPhones e gli SmartPhones non dispongono di SIP. Vedi http://msdn.microsoft.com/en-us/library/bb416452. aspx .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top