Maison interface Web Tutoriel PS L'implémentation de la saisie chinoise sur un formulaire vierge sous C# peut implémenter un outil de texte de type PS

L'implémentation de la saisie chinoise sur un formulaire vierge sous C# peut implémenter un outil de texte de type PS

Feb 15, 2017 am 10:23 AM

Saisie chinoise sur formulaire vierge sous C#

Mots clés : outil de texte de type PS, saisie chinoise répétée

.

Récemment, j'ai fait des recherches sur la création d'un outil de texte de type PS, j'ai vérifié beaucoup d'informations et j'ai demandé à beaucoup de gens. Finalement, le travail acharné a finalement porté ses fruits. Écrivez-le pour que tout le monde puisse en discuter.

Ouvrez la méthode de saisie sur un formulaire vierge. Quoi qu'il en soit, la méthode de saisie ne peut pas être ouverte. Même si this.ImeMode= ImeMode.NoControl est défini, la fenêtre d'enregistrement de la méthode de saisie ne peut pas être ouverte. Je suis allé sur le forum de développement Microsoft et j'ai posé quelques questions. Merci au modérateur Zhou Xuefeng et Riquel_Dong. modérateur pour leurs conseils. J'ai utilisé l'API. Function: ImmAssociateContext(IntPtr hWnd, IntPtr hIMC); Enfin, la méthode de saisie est appelée. Sa fonction est d'associer l'entrée à la fenêtre spécifiée.


Le code est le suivant :


f (m.Msg == WM_IME_SETCONTEXT && m .WParam.ToInt32() == 1)


{


ImmAssociateContext(this.Handle, m_hImc);


}


Maintenant, la méthode de saisie peut être appelée. Mais un nouveau problème est apparu. Comment obtenir les mots sur la fenêtre d'enregistrement de la méthode de saisie.


Lorsque la méthode de saisie est activée pour saisir du texte, le message WM_IME_CHAR sera envoyé. Nous pouvons obtenir les caractères chinois en traitant ce message <.>


Vous pouvez utiliser la fonction IMM : ImmGetCompositionString(IntPtr hIMC, int dwIndex, StringBuilder lpBuf, int dwBufLen) pour obtenir les caractères chinois ou le type NUICODE) ; caractères saisis sur le formulaire de saisie. Bien sûr, nous ne les étudierons pas ici. Rien d'autre.


Le code à utiliser. extraire les caractères est le suivant :


cas WM_IME_CHAR :

int size = ImmGetCompositionString(m_hImc, GCS_COMPSTR, null , 0);


size = sizeof(Char);


ImmGetCompositionString(m_hImc , GCS_RESULTSTR, str, size);


sb .Append(str.ToString());


MessageBox.Show(str.ToString());


intoText();//Print Text


isShowChina = true;


                                                                   


                                                                                   🎜>

Cela semble être fait. en le testant, j'ai constaté que tous les mots imprimés sont répétés. Par exemple, si je saisis « Servir le peuple », ce qui s'imprime est « Oh mon Dieu, le problème est où.


J'ai vérifié MSDN. Il y a cette description de WM_IME_CHAR :


le message WM_IME_CHAR. inclut un caractère à deux octets et l'application transmet ce message à DefWindowProc


Est-ce là le problème ? message deux fois.


Après avoir lu une discussion en ligne, j'ai trouvé une solution : ajouter un jugement


if (m.WParam.ToInt32() == PM_REMOVE)


{


}


Test .Enfin plus de problèmes


Code post


en utilisant System;

en utilisant System.Collections.Generic;

en utilisant System.ComponentModel;

en utilisant System.Drawing;

en utilisant System. Données ;

à l'aide de System.Text;

à l'aide de System.Windows.Forms;

à l'aide de System.Runtime;

espace de noms WindowsApplication2

{

classe partielle publique UserControl1 : UserControl

{


        IntPtr m_hImc;


        bool isShowChina = false;

        public const int WM_IME_SETCONTEXT = 0x0281;


        const privé int WM_IME_CHAR = 0x0286;


       const privé int WM_CHAR = 0x0102;


     const privée int WM_IME_COMPOSITION = 0x010F;


        private const int GCS_COMPSTR = 0x0008;


        [DllImport("Imm32.dll" )]

        public static extern IntPtr ImmGetContext(IntPtr hWnd);


        [DllImport("Imm32.dll")]

        public static extern IntPtr ImmAssociateContext(IntPtr hWnd, IntPtr hIMC);


        [DllImport("imm32.dll")]

        static extern int ImmGetCompositionString(IntPtr hIMC) , int dwIndex, StringBuilder  lpBuf, int dwBufLen);



        private int GCS_RESULTSTR = 0x0800;


        private const int HC_ACTION = 0;


      private const int PM_REMOVE  = 0x0001;



        StringBuilder sb = new StringBuilder();


        Font font = new Font("宋体", 14, FontStyle.Regular);

        public UserControl1()

        {

            InitializeComponent();

            

        }


        protégé override void WndProc(ref Message m)

        {

            base.WndProc(ref m);

            if (m.Msg == WM_IME_SETCONTEXT && m.WParam.ToInt32( ) == 1)

            {

                ImmAssociateContext(this.Handle, m_hImc);

             

         }

            commutateur (m. Msg)

            {

                case WM_CHAR:

                    KeyEventArgs e = new KeyEventArgs(((Keys)((int)((long)m. WParam))) | ModifierKeys);

                    char a = (char)e.KeyData; //英文

                    sb.Append(a);

                    intoText();

                    isShowChina = false;

                    pause ;

case WM_IME_CHAR :

                  if (m.WParam.ToInt32() == PM_REMOVE) //如果不做这个判断.会打印出重复的中文

                    {

                        StringBuilder str = new StringBuilder();

                        int size = ImmGetCompositionString(m_hImc, G CS_COMPSTR, null, 0);

                        size = sizeof(Char);

                        ImmGetCompositionString(m_hImc, GCS_RESULTSTR, str, size);

                        sb.Append(str.ToString());

                       MessageBox.Show(str.ToString());

                        intoText();

isshowchina = vrai;

}

Pause ;                                                                                                                                                                                                                                               {>

{

Graphiques g = this.creategraphics ();

G.Drawstring (sb.tostring (), font, brushes.black, 10, 10);                                                      Implémentation de la saisie chinoise sur un formulaire vierge sous plusieurs C# peut implémenter un texte de type PS Outils. Pour les articles connexes, veuillez faire attention au site Web PHP chinois !

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser Photoshop pour créer des graphiques sur les réseaux sociaux? Comment utiliser Photoshop pour créer des graphiques sur les réseaux sociaux? Mar 18, 2025 pm 01:41 PM

L'article détaille à l'aide de Photoshop pour les graphiques des médias sociaux, couvrant la configuration, les outils de conception et les techniques d'optimisation. Il met l'accent sur l'efficacité et la qualité de la création graphique.

Comment préparer des images pour l'utilisation du Web dans Photoshop (taille du fichier, résolution, espace coloré)? Comment préparer des images pour l'utilisation du Web dans Photoshop (taille du fichier, résolution, espace coloré)? Mar 13, 2025 pm 07:28 PM

L'article discute de la préparation d'images pour l'utilisation du Web dans Photoshop, en nous concentrant sur l'optimisation de la taille du fichier, de la résolution et de l'espace colorimétrique. Le problème principal est d'équilibrer la qualité d'image avec des temps de chargement rapides.

Comment utiliser efficacement les outils de déménagement de remplissage et de contenu de contenu de Photoshop? Comment utiliser efficacement les outils de déménagement de remplissage et de contenu de contenu de Photoshop? Mar 13, 2025 pm 07:35 PM

L'article discute de l'utilisation efficace de l'utilisation efficace de remplissage et de déplacement du contenu de Photoshop, offrant des conseils sur la sélection des zones source, l'évitement des erreurs et l'ajustement des paramètres pour des résultats optimaux.

Comment puis-je calibrer mon moniteur pour une couleur précise dans Photoshop? Comment puis-je calibrer mon moniteur pour une couleur précise dans Photoshop? Mar 13, 2025 pm 07:31 PM

L'article traite des moniteurs d'étalonnage pour une couleur précise dans Photoshop, des outils d'étalonnage, des effets de l'étalonnage incorrect et de la fréquence de recalibrage. Le principal problème est d'assurer la précision des couleurs.

Comment utiliser les capacités d'édition vidéo de Photoshop? Comment utiliser les capacités d'édition vidéo de Photoshop? Mar 18, 2025 pm 01:37 PM

L'article explique comment utiliser Photoshop pour l'édition vidéo, détaillant les étapes pour importer, modifier et exporter des vidéos et mettre en évidence les fonctionnalités clés telles que le panneau de chronologie, les couches vidéo et les effets.

Comment créer des GIF animés dans Photoshop? Comment créer des GIF animés dans Photoshop? Mar 18, 2025 pm 01:38 PM

L'article discute de la création et de l'optimisation des GIF animés dans Photoshop, y compris l'ajout de trames aux GIF existants. L'accent principal est de l'équilibre entre la qualité et la taille du fichier.

Comment préparer des images pour le Web à l'aide de Photoshop (optimiser la taille du fichier, la résolution)? Comment préparer des images pour le Web à l'aide de Photoshop (optimiser la taille du fichier, la résolution)? Mar 18, 2025 pm 01:35 PM

L'article discute de l'optimisation des images pour le Web à l'aide de Photoshop, en se concentrant sur la taille et la résolution des fichiers. Le principal problème est d'équilibrer la qualité et les temps de chargement.

Comment préparer des images pour l'impression à l'aide de Photoshop (résolution, profils de couleurs)? Comment préparer des images pour l'impression à l'aide de Photoshop (résolution, profils de couleurs)? Mar 18, 2025 pm 01:36 PM

L'article guide la préparation d'images à l'impression dans Photoshop, en se concentrant sur la résolution, les profils de couleurs et la netteté. Il fait valoir que les profils de 300 PPI et CMYK sont essentiels pour les impressions de qualité.

See all articles