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를 구현하기 위해 노력하고 전혀, 나는 아직도 어떤 부분이 잘못되었다는 것을 알아 내려고 노력하고 있지만 누군가가 올바른 방향으로 나를 가리킬 수 있기를 바랍니다. 어떤 도움을 주시면 감사하겠습니다. 감사.