当前位置: 代码迷 >> WinCE >> 怎么改变WINCE的SIP(软键盘)的显示位置
  详细解决方案

怎么改变WINCE的SIP(软键盘)的显示位置

热度:39   发布时间:2016-04-28 12:45:46.0
如何改变WINCE的SIP(软键盘)的显示位置
我的程序中的输入框总被软键盘挡住,请问如何通过编程改变WINCE的SIP(软键盘)的显示位置。
注:我在网上看到
void CSIPDemoDlg::OnButtonMove()
{
SIPINFO SipInfo;
memset(&SipInfo,0,sizeof(SipInfo));
SipInfo.cbSize=sizeof(SIPINFO);
BOOL bRes = SipGetInfo(&SipInfo);
if ( bRes )
{
CRect rc(SipInfo.rcSipRect);
rc.OffsetRect(0,-20); // 修改此处可以更改显示位置
SipSetDefaultRect(&rc);
CLSID clsid;
if ( SipGetCurrentIM(&clsid) )
{
SipSetCurrentIM(&clsid);
}
SipShowIM(SIPF_ON);
}
}
但是它用了CRECT这个MFC的类,我不想用MFC的类或是函数,就用WIN32的类或函数
------解决方案--------------------
关注。。。
------解决方案--------------------
rcSipRect是一个RECT类型结构体的变量,跟MFC无关,你手动改一下rcSipRect的内容就行了
------解决方案--------------------
SIP 函数肯定是可以实现的

LZ查一下Help文档吧
------解决方案--------------------
引用:
rcSipRect是一个RECT类型结构体的变量,跟MFC无关,你手动改一下rcSipRect的内容就行了

Crect不是MFC的类吗
------解决方案--------------------
但是RECT只是一个结构体,你可以看一下SIPINFO的定义,里面写的很清楚
------解决方案--------------------
我是这样改的
if ( bRes )
{
rc.top = SipInfo.rcSipRect.top+200;
rc.bottom = SipInfo.rcSipRect.bottom+200;
rc.left = SipInfo.rcSipRect.left;
rc.right = SipInfo.rcSipRect.right;
//CRect rc(SipInfo.rcSipRect);
 //rc.OffsetRect(0,240);
 SipSetDefaultRect(&rc);
 CLSID clsid;
 if ( SipGetCurrentIM(&clsid) )
 {
 SipSetCurrentIM(&clsid);
 }
 SipShowIM(SIPF_ON);
}
软键盘显示不出来
------解决方案--------------------
SipGetInfo之后,得到了SIPINFO结构体的内容,你修改完内容再SipSetInfo就行了啊,不用SipSetDefaultRect函数……
------解决方案--------------------
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;
SipInfo.rcSipRect.bottom = rect.bottom;
  SipInfo.rcSipRect.left = rect.left;
SipInfo.rcSipRect.right = rect.left;

SipSetInfo(&SipInfo);
}
     
     SipShowIM(SIPF_ON);
这个代码应该可以实现
------解决方案--------------------
先要调用 SHOW: SipShowIM(SIPF_ON),然后改变位置,不想要时关掉就OK啦
------解决方案--------------------
函数都用了,还不用MFC的,呵呵
------解决方案--------------------
我原来显示不出来是因为显示屏幕外面去了,我用的是小键盘,但是用大键盘没什么反应,SipSetDefaultRect(&rc);不起作用
请问大键盘和小键盘有什么区别啊
------解决方案--------------------
我想试试movewindow,但是如何得到软键盘的hwnd啊
------解决方案--------------------
用FindWindow找吧
  相关解决方案