Pregunta

Tengo el siguiente problema:

Abro el diálogo, abro el teclado SIP para llenar el formulario y luego minimizo el SIP. Luego, cuando cierro el cuadro de diálogo actual y vuelvo al cuadro de diálogo principal, aparece nuevamente el teclado SIP. ¿Alguien sabe cómo puedo mostrar / ocultar el teclado SIP mediante programación o mejor qué se puede hacer para resolver el problema descrito? Una vez que el usuario minimiza el teclado, no debería aparecer en la pantalla al cambiar de diálogo.

¡Gracias!

¿Fue útil?

Solución

Utilizamos SHSipPreference para controlar la visualización del SIP en nuestras aplicaciones Sé que funciona con MFC y establece el estado del SIP para la ventana para que pueda configurarlo una vez y sabe que el estado del SIP se restaurará a su estado establecido cada vez que se muestre la ventana.

Nunca he oído hablar de SipShowIM pero vi en la página de MSDN vinculada:

  

El método estándar de mostrar y   ocultar las exhibiciones SIP (SIPShowIM)   algunos problemas en los cuadros de diálogo de MFC.

Otros consejos

Deberá llamar a SipShowIM () en coredll. Vea este artículo de MSDN:

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

Puede usar el componente Microsoft.WindowsCE.Forms.InputPanel. Puede mostrar / ocultar el SIP mediante programación utilizando la propiedad Enabled. Hay un componente InputPanel en la caja de herramientas.

También hay un evento EnabledChanged para InputPanel que puede manejar. Por lo general, desea mostrar el SIP en un evento GetFocus de un cuadro de texto.

¿Estás usando MFC?

El problema es que el estado SIP es por diálogo, no por aplicación. Por lo tanto, debe mostrar / ocultar dentro de cada cuadro de diálogo de forma independiente.

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

Y debe eliminar las teclas de la pantalla completa o de la barra de tareas si no es necesario :)

Y la otra cosa a usar:

 SHSipPreference(m_hWnd,SIP_UP); // SIP_DOWN

O incluso:

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

Pero este último podría no ser tan estándar :) Aún así funciona. Pruébalos.

  

... En algún otro cuadro de diálogo, quiero establecer la distribución del teclado en numérico,   así que agregué la siguiente línea en el constructor:   SendMessage (EM_SETINPUTMODE, 0, EIM_NUMBERS); Sin embargo, si elimino esto   línea resuelvo un problema y creo otro

GetLastError () es 6 (identificador no válido) o 120 (no compatible). EM_SETINPUTMODE solo es compatible con SmartPhones, y los SmartPhones no tienen SIP. Consulte http://msdn.microsoft.com/en-us/library/bb416452. aspx .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top