웹 프론트엔드 PS 튜토리얼 C#에서 빈 양식에 중국어 입력을 구현하면 PS와 같은 텍스트 도구를 구현할 수 있습니다.

C#에서 빈 양식에 중국어 입력을 구현하면 PS와 같은 텍스트 도구를 구현할 수 있습니다.

Feb 15, 2017 am 10:23 AM

C#의 빈 양식에 중국어 입력

키워드: PS와 같은 텍스트 도구, 중국어 입력 반복

최근 PS와 같은 텍스트 도구를 만들기 위해 연구하고 많은 정보를 확인하고 많은 사람들에게 물어봤습니다. 마침내 노력이 결실을 맺었습니다. 모두가 토론할 수 있도록 작성하세요.

빈 양식에서 입력 방법을 엽니다. 무슨 일이 있어도 입력 방법을 열 수 없습니다. this.ImeMode= ImeMode.NoControl 을 설정해도 입력 방법 기록 창이 열리지 않습니다. Microsoft 개발 포럼에 가서 질문을 해주신 Zhou Xuefeng 님께 감사드립니다. Riquel_Dong은 API를 사용했습니다. 함수: ImmAssociateContext(IntPtr hWnd, IntPtr hIMC); 마지막으로 입력 방법이 호출되어 지정된 창에 연결됩니다.


코드는 다음과 같습니다.


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


{


ImmAssociateContext(this.Handle, m_hImc)


}


이제 입력 방법을 호출할 수 있지만 입력 방법 기록 창에서 단어를 가져오는 방법에 대한 새로운 문제가 발생했습니다.


텍스트를 입력할 때 입력 방법을 켜면 WM_IME_CHAR 메시지가 전송됩니다.


ImmGetCompositionString(IntPtr hIMC, int dwIndex, StringBuilder lpBuf, int dwBufLen)을 사용하여 중국어 문자 또는 NUICODE 유형을 얻을 수 있습니다. 물론 여기서는 한자에 대해서만 다루지는 않습니다.

문자 추출은 다음과 같습니다:

case 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();// 텍스트 인쇄

                                          >

                                                                                      🎜>

알겠습니다. 테스트한 결과 인쇄된 단어가 모두 반복되는 단어인 것으로 나타났습니다. People", 출력되는 것은 "Serve the People"입니다. 맙소사, 문제가 있습니다. 어디에 있습니까?

MSDN을 확인했습니다. WM_IME_CHAR에 대한 설명은 다음과 같습니다.

WM_IME_CHAR 메시지에는 2바이트 문자가 포함되어 있으며 애플리케이션은 이 메시지를 DefWindowProc에 전달합니다

이게 문제인 걸까요. 메시지를 두 번 보내는 문제입니다.


온라인 토론을 읽은 후 해결책을 생각해냈습니다: 판단 추가


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


{


}


테스트 결과 문제가 없습니다.


코드 포스트



시스템 사용,

System.Collections 사용 .Generic;

System.ComponentModel 사용;


System.드로잉 사용;

System.Data 사용;

System.Text 사용;

System.Windows.Forms 사용;

System.Runtime .InteropServices 사용;

네임스페이스 WindowsApplication2

{

공개 부분 클래스 UserControl1 : UserControl

{

        IntPtr m_hImc;


        bool isShowChina = false;

        public const int WM_IME_SETCONTEXT = 0x0281;


        private const int WM_IME_CHAR = 0x0286;


        private const int WM_CHAR = 0x0102;


       비공개 const 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(IntP tr 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 글꼴 = new Font("宋体", 14, FontStyle.Regular);

        public UserControl1()

        {

            InitializeComponent();

            

        }


        private void UserControl1_Load(객체 전송자, EventArgs e)

        {

            m_hImc = ImmGetContext(this.Handle);

        }

        보호됨 void WndProc(ref Message m)

        {

            base.WndProc(ref m);

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

            {

                ImmAssociateContext(this.Handle, m_hImc);

             

           }

            스위치(m. Msg)

            {

                case WM_CHAR:

                  KeyEventArgs e = new KeyEventArgs(((키)((int)((long)m.WP 아람))) | ModifierKeys);

                    char a = (char)e.KeyData; //영어

                    sb.Append(a);

                    intoText();

                    isShowChina = false;

                    휴식;

case WM_IME_CHAR:


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

> GCS_COMPSTR, null, 0);

                        size += sizeof(Char);

                        ImmGetCompositionString(m_hImc, GCS_RESULTSTR, str, size);

                        sb.Append(str.ToString());

                        MessageBox.Show(str.ToString()) ;

                        intoText();

isshowchina = true;

}

중단 >

                                         ~                                                           {>

{

그래픽 g = this.creategraphics ();

G.Drawstring(sb.tostring (), 글꼴, Brushes.black, 10, 10) >

                                                          여러 C#에서 빈 양식에 중국어 입력을 구현하면 PS와 유사한 텍스트를 구현할 수 있습니다. 도구 관련 기사는 PHP 중국어 웹사이트를 참고하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PS가 계속 로딩을 보여주는 이유는 무엇입니까? PS가 계속 로딩을 보여주는 이유는 무엇입니까? Apr 06, 2025 pm 06:39 PM

PS "로드"문제는 자원 액세스 또는 처리 문제로 인한 것입니다. 하드 디스크 판독 속도는 느리거나 나쁘다 : CrystalDiskinfo를 사용하여 하드 디스크 건강을 확인하고 문제가있는 하드 디스크를 교체하십시오. 불충분 한 메모리 : 고해상도 이미지 및 복잡한 레이어 처리에 대한 PS의 요구를 충족시키기 위해 메모리 업그레이드 메모리. 그래픽 카드 드라이버는 구식 또는 손상됩니다. 운전자를 업데이트하여 PS와 그래픽 카드 간의 통신을 최적화하십시오. 파일 경로는 너무 길거나 파일 이름에는 특수 문자가 있습니다. 짧은 경로를 사용하고 특수 문자를 피하십시오. PS 자체 문제 : PS 설치 프로그램을 다시 설치하거나 수리하십시오.

PS에서 PDF를 내보내는 것에 대한 일반적인 질문은 무엇입니까? PS에서 PDF를 내보내는 것에 대한 일반적인 질문은 무엇입니까? Apr 06, 2025 pm 04:51 PM

PDF로 PS를 내보낼 때 자주 묻는 질문 및 솔루션 : 글꼴 임베딩 문제 : "글꼴"옵션을 확인하고 "포함"을 선택하거나 글꼴을 곡선 (경로)으로 변환하십시오. 색상 편차 문제 : 파일을 CMYK 모드로 변환하고 색상을 조정하십시오. RGB로 직접 내보내려면 미리보기 및 색상 편차를위한 심리적 준비가 필요합니다. 해상도 및 파일 크기 문제 : 실제 조건에 따라 해상도를 선택하거나 압축 옵션을 사용하여 파일 크기를 최적화하십시오. 특수 효과 문제 : 내보내기 전에 층을 병합 (평평한).

PS가 항상 로딩되고 있음을 보여줄 때 로딩 문제를 해결하는 방법은 무엇입니까? PS가 항상 로딩되고 있음을 보여줄 때 로딩 문제를 해결하는 방법은 무엇입니까? Apr 06, 2025 pm 06:30 PM

PS 카드가 "로드"되어 있습니까? 솔루션에는 컴퓨터 구성 (메모리, 하드 디스크, 프로세서) 확인, 하드 디스크 조각 청소, 그래픽 카드 드라이버 업데이트, PS 설정 조정, PS 재설치 및 우수한 프로그래밍 습관 개발이 포함됩니다.

PS에서 PDF를 내보내기위한 비밀번호 보호를 설정하는 방법 PS에서 PDF를 내보내기위한 비밀번호 보호를 설정하는 방법 Apr 06, 2025 pm 04:45 PM

Photoshop에서 암호로 보호 된 PDF를 내보내십시오 : 이미지 파일을 엽니 다. "파일"을 클릭하십시오. & gt; "수출"& gt; "PDF로 수출". "보안"옵션을 설정하고 동일한 비밀번호를 두 번 입력하십시오. "내보내기"를 클릭하여 PDF 파일을 생성하십시오.

PS의 로딩 속도 속도를 높이는 방법? PS의 로딩 속도 속도를 높이는 방법? Apr 06, 2025 pm 06:27 PM

느린 Photoshop 스타트 업 문제를 해결하려면 다음을 포함한 다중 프론트 접근 방식이 필요합니다. 하드웨어 업그레이드 (메모리, 솔리드 스테이트 드라이브, CPU); 구식 또는 양립 할 수없는 플러그인 제거; 정기적으로 시스템 쓰레기 및 과도한 배경 프로그램 청소; 주의를 기울여 관련없는 프로그램 폐쇄; 시작하는 동안 많은 파일을 열지 않도록합니다.

PS가 파일을 열 때로드 문제를 해결하는 방법은 무엇입니까? PS가 파일을 열 때로드 문제를 해결하는 방법은 무엇입니까? Apr 06, 2025 pm 06:33 PM

"로드"는 PS에서 파일을 열 때 말더듬이 발생합니다. 그 이유에는 너무 크거나 손상된 파일, 메모리 불충분, 하드 디스크 속도가 느리게, 그래픽 카드 드라이버 문제, PS 버전 또는 플러그인 충돌이 포함될 수 있습니다. 솔루션은 다음과 같습니다. 파일 크기 및 무결성 확인, 메모리 증가, 하드 디스크 업그레이드, 그래픽 카드 드라이버 업데이트, 의심스러운 플러그인 제거 또는 비활성화 및 PS를 다시 설치하십시오. 이 문제는 PS 성능 설정을 점차적으로 확인하고 잘 활용하고 우수한 파일 관리 습관을 개발함으로써 효과적으로 해결할 수 있습니다.

PS 펜 도구를 사용하는 방법 PS 펜 도구를 사용하는 방법 Apr 06, 2025 pm 10:15 PM

펜 도구는 정확한 경로와 모양을 생성하고 다음과 같이 사용하는 도구입니다. 펜 도구 (P)를 선택하십시오. 경로, 채우기, 스트로크 및 모양 옵션을 설정합니다. 앵커 포인트 생성을 클릭하고 곡선을 끌어 앵커 포인트를 해제합니다. CTRL/CMD ALT/OPT를 눌러 앵커 포인트를 삭제하고 앵커 포인트를 끌고 이동 한 다음 곡선 조정을 클릭하십시오. 첫 번째 앵커를 클릭하여 경로를 닫으려면 모양을 만들고 마지막 앵커를 두 번 클릭하여 열린 경로를 만듭니다.

PS 페더 링은 어떻게 전환의 부드러움을 제어합니까? PS 페더 링은 어떻게 전환의 부드러움을 제어합니까? Apr 06, 2025 pm 07:33 PM

깃털 통제의 열쇠는 점진적인 성격을 이해하는 것입니다. PS 자체는 그라디언트 곡선을 직접 제어하는 ​​옵션을 제공하지 않지만 여러 깃털, 일치하는 마스크 및 미세 선택으로 반경 및 구배 소프트를 유연하게 조정하여 자연스럽게 전이 효과를 달성 할 수 있습니다.

See all articles