在弹出的模式对话框中,如果有编辑框,需要自动显示软键盘进行输入,并且自动调节软键盘位置。如果不是编辑框,则应该关闭软键盘,并设置到原始位置。
继承了CEdit类,处理其获得焦点和失去焦点的消息:
ON_CONTROL_REFLECT(EN_SETFOCUS, OnSetfocus)
ON_CONTROL_REFLECT(EN_KILLFOCUS, OnKillfocus)
void CMyEdit::OnSetfocus()
{
RECT rect;
GetRect( &rect );
ClientToScreen(&rect);
SIPINFO si;
si.dwImDataSize = 0;
si.cbSize = sizeof(si);
BOOL bSip = SipGetInfo(&si);
if(rect.top >= 150)
{
si.rcSipRect.top = 0;
}
else
{
si.rcSipRect.top = 195;//half of the screen
}
SipSetInfo(&si);
SipShowIM(SIPF_ON);
}
void CMyEdit::OnKillfocus()
{
SipShowIM(SIPF_OFF);
SIPINFO si;
si.dwImDataSize = 0;
si.cbSize = sizeof(si);
BOOL bSip = SipGetInfo(&si);
si.rcSipRect.top = 195;
SipSetInfo(&si);
}