Question

J'ai le problème suivant:

J'ouvre la boîte de dialogue, ouvre le clavier SIP pour remplir le formulaire, puis le minimise. Ensuite, lorsque je ferme la boîte de dialogue actuelle et que je retourne à la boîte de dialogue principale, le clavier SIP apparaît à nouveau. Est-ce que quelqu'un sait comment afficher / masquer le clavier SIP par programme ou mieux ce qui pourrait être fait pour résoudre le problème décrit? Une fois que l'utilisateur a minimisé le clavier, il ne devrait plus apparaître à l'écran lors du changement de dialogue.

Merci!

Était-ce utile?

La solution

Nous utilisons SHSipPreference pour contrôler l'affichage du SIP dans nos applications. Je sais que cela fonctionne avec MFC et définit l'état du SIP pour la fenêtre afin que vous puissiez le configurer une fois et que vous savez que l'état SIP sera restauré dans l'état défini chaque fois que la fenêtre est affichée.

Je n'ai jamais entendu parler de SipShowIM, mais j'ai vu sur la page MSDN liée:

  

La méthode standard d'affichage et   masquer les expositions SIP (SIPShowIM)   quelques problèmes dans les boîtes de dialogue MFC.

Autres conseils

Vous souhaitez appeler SipShowIM () dans Coredll. Voir cet article MSDN:

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

Vous pouvez utiliser le composant Microsoft.WindowsCE.Forms.InputPanel. Vous pouvez afficher / masquer le SIP par programme à l'aide de la propriété Enabled. Un composant InputPanel se trouve dans la boîte à outils.

Vous pouvez également gérer un événement EnabledChanged pour InputPanel. Vous souhaitez généralement afficher le SIP lors d’un événement GetFocus d’une zone de texte.

Utilisez-vous le MFC?

Le problème est que l'état SIP est défini par boîte de dialogue et non par application. Vous devez donc l'afficher ou le masquer indépendamment dans chaque dialogue.

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

Et vous devriez supprimer toutes les clés plein écran ou de la barre des tâches si vous n'en avez pas besoin:)

Et l'autre chose à utiliser:

 SHSipPreference(m_hWnd,SIP_UP); // SIP_DOWN

Ou même:

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

Mais ce dernier pourrait ne pas être aussi standard :) Cela fonctionne quand même. Essayez-les.

  

... Dans une autre boîte de dialogue, je souhaite définir la disposition du clavier sur numérique,   alors j'ai ajouté la ligne suivante dans le constructeur:   SendMessage (EM_SETINPUTMODE, 0, EIM_NUMBERS); Cependant si je supprime cette   ligne, je résous un problème et en crée un autre

GetLastError () vaut 6 (descripteur non valide) ou 120 (non pris en charge). EM_SETINPUTMODE est uniquement pris en charge sur les SmartPhones et ceux-ci n'ont pas de SIP. Voir http://msdn.microsoft.com/en-us/library/bb416452. aspx .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top