一、编辑框自动弹出软键盘
在弹出的模式对话框中,如果有编辑框,需要自动显示软键盘进行输入,并且自动调节软键盘位置。如果不是编辑框,则应该关闭软键盘,并设置到原始位置。
继承了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);
}
SIPINFO SipInfo;
memset(&SipInfo, 0, sizeof(SipInfo));SipInfo.cbSize = sizeof(SipInfo);
RECT rect;
//GetClientRect(&rect)更换为获得相应控件的代码
//本人这里的代码是在一个CEdit继承类中执行的
GetClientRect(&rect);
ClientToScreen(&rect);
BOOL bRet = SipGetInfo(&SipInfo);
if (bRet)
{
SipInfo.rcSipRect.top = rect.bottom+175;
SipInfo.rcSipRect.bottom = rect.bottom;
SipInfo.rcSipRect.left = rect.left+335;
SipInfo.rcSipRect.right = rect.left;
SipSetInfo(&SipInfo);
}
SipShowIM(SIPF_ON);