protected virtual void OnChar(string c) { if (this.Char == null) { return; } CompositionEventArgs e = new CompositionEventArgs(c, this.OpenStatus, this.isComposition); this.Char(this, e); }
protected virtual void OnCharAlt(string c, bool open, bool composition) { if (this.Char == null) { return; } CompositionEventArgs e = new CompositionEventArgs(c, open, composition, true); this.Char(this, e); }
//--以下 特異的 event protected virtual void OnComposition(int lParam) { if (this.Composition == null) { return; } if ((lParam & (int)IME.GCS.RESULTSTR) == 0) { return; } CompositionEventArgs e = new CompositionEventArgs(this.GetCompositionString(IME.GCS.RESULTSTR), true, true); this.Composition(this, e); }
protected override void WndProc(ref Message m) { if (CompositionEvent != null && m.Msg == WM_IME_COMPOSITION) { if (((int)m.LParam & GCS_RESULTREADSTR) > 0) { int Imc = ImmGetContext(this.Handle); int sz = ImmGetCompositionString(Imc, GCS_RESULTREADSTR, null, 0); StringBuilder str = new StringBuilder(sz); ImmGetCompositionString(Imc, GCS_RESULTREADSTR, str, str.Capacity); ImmReleaseContext(this.Handle, Imc); CompositionEventArgs args = new CompositionEventArgs(); args.ImeStr = str.ToString(); CompositionEvent(this, args); } } base.WndProc(ref m); }
private static void IMEControl_CompositionEvent(CompositionEventArgs comp) { switch (comp.state) { case CompositionState.StartComposition: case CompositionState.EndComposition: case CompositionState.Composing: KeyboardInput_.comp.caret = comp.caretPos; KeyboardInput_.comp.text = comp.strComp; break; case CompositionState.Commit: foreach (char ch in comp.strCommit) { CharEntered?.Invoke(null, new CharacterEventArgs(ch, 0)); } break; default: break; } }