Programing/C#
한글입력 구분
즐거운 개발자
2014. 3. 26. 10:54
반응형
#region ImportDLL
[DllImport("Imm32.dll", SetLastError = true)]
public static extern IntPtr ImmGetContext(IntPtr hWnd);
[DllImport("imm32.dll")]
public static extern bool ImmGetConversionStatus(IntPtr himc, ref int lpdw, ref int lpdw2);
[DllImport("imm32.dll")]
public static extern bool ImmGetOpenStatus(IntPtr himc);
private Byte IME_CMODE_HANGEUL = 0x0001;
#endregion
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
//ime가 한글일경우 바로 editMode로 들어가도록 한다. textbox입력 모드로 하기위해서
int iMode = 0;
int iSentence = 0;
IntPtr HIme = ImmGetContext(this.dataGridViewUpload.Handle);
bool bSuccess = ImmGetConversionStatus(HIme, ref iMode, ref iSentence);
if (ImmGetOpenStatus(HIme))
{
if ((iMode & IME_CMODE_HANGEUL) > 0)
{
if (!((keyData & Keys.Control) == Keys.Control))
{
switch (keyData)
{
case Keys.Up:
case Keys.Down:
case Keys.Left:
case Keys.Right:
break;
default:
dataGridViewUpload.BeginEdit(true);
break;
}
}
}
}
if (keyData == Keys.Enter)
{
if (this.dataGridViewUpload.CurrentCell != null
&& this.dataGridViewUpload.CurrentCell.IsInEditMode
&& !(this.dataGridViewUpload.CurrentCell is DataGridViewCheckBoxCell))
{
MoveNextCell();
}
}
return base.ProcessCmdKey(ref msg, keyData);
}