2

Button을 사용하는 SendInput 및 패널을 사용하여 WinCE 용 사용자 지정 키보드를 개발했습니다. 사용자 정의 키보드가 잘 작동하고 내 WinForm의 텍스트 상자에서 문자를 표시 할 수 있습니다. 나는 특정 Windows 메시지 (WM_IME_COMPOSITION)를 캡처 관리WinCE에서 한국어 IME가있는 사용자 지정 키보드

// Subclass to capture Windows messages, passing the handle of the TextBox 
_newproc = new WndProcDelegate(MyWndProc); 
_oldproc = GetWindowLong(textBox1.Handle, -4); 
result = SetWindowLong(textBox1.Handle, -4, Marshal.GetFunctionPointerForDelegate(_newproc)); 

// Capture the WM_IME_COMPOSITION message to get the composite character 
public IntPtr MyWndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam) 
{ 
     switch (msg) 
     { 
      case WM_IME_COMPOSITION: 
      { 
       int comp = lParam.ToInt32(); 
       int intdwSize = 0; 

       if ((comp & GCS_RESULTSTR) > 0) 
        { 
         IntPtr intICHwnd = IntPtr.Zero; 
         intICHwnd = ImmGetContext(hWnd); 

         intdwSize = ImmGetCompositionString(intICHwnd, GCS_RESULTSTR, 0, 0); 
         if (intdwSize != 0) 
         { 
          StringBuilder s = new StringBuilder(intdwSize + 1); 
          intdwSize = ImmGetCompositionString(intICHwnd, GCS_RESULTSTR, s, intdwSize); 
          textBox1.Text = s.ToString(); 
         } 
         ImmReleaseContext(hWnd 
          , intICHwnd); 
        } 
        else if ((comp & GCS_COMPSTR) > 0) 
        { 
         IntPtr intICHwnd = IntPtr.Zero; 

         intICHwnd = ImmGetContext(hWnd); 

         intdwSize = ImmGetCompositionString(intICHwnd, GCS_COMPSTR, 0, 0); 
         if (intdwSize != 0) 
         { 
          StringBuilder s = new StringBuilder(intdwSize); 
          intdwSize = ImmGetCompositionString(intICHwnd, GCS_COMPSTR, s, intdwSize); 
          // Trying to display the composite character in the textbox 
          textBox1.Text = s.ToString(); 
         } 
         ImmReleaseContext(hWnd, intICHwnd); 

        } 
       } 
       break; 


      default: 
       break; 
     } 

    return CallWindowProc(_oldproc, hWnd, msg, wParam, lParam); 
} 

,하지만 분명히, 구성의 프로세스가 작동하지 않습니다 :

현재 나는 다음과 같은 방법을 사용하여 사용자 정의 키보드에 한국어 IME를 구현하기 위해 노력하고 전혀, 나는 아직도 어떤 부분이 잘못되었다는 것을 알아 내려고 노력하고 있지만 누군가가 올바른 방향으로 나를 가리킬 수 있기를 바랍니다. 어떤 도움을 주시면 감사하겠습니다. 감사.

답변

1

나는 내가 직면 한 문제에 대한 해결책을 발견했다. 문제는 위의 코드에서 비롯된 것이 아니라 내가 사용한 컨트롤입니다. 처음에는 텍스트 상자와 버튼으로 사용자 정의 키보드를 테스트했습니다. 그러나 버튼을 클릭 할 때마다 포커스가 textBox에서 버튼으로 이동하여 어떻게 든 컴포지션을 끝냅니다.

Button 컨트롤을 pictureBox로 바꾸면 구성이 성공적으로 완료됩니다. 희망이 도움이됩니다.