现在的位置: 首页 > 综合 > 正文

WM5.0中输入法跳出窗体调整加滚动条(VC++)

2013年09月18日 ⁄ 综合 ⁄ 共 1672字 ⁄ 字号 评论关闭

准备工作:加个基于对话框的MFC智能设备的项目,随便加入几个Edit控件和BUTTON控件(是为了显示滚动的效果,同时Edit控件还可以调入输入法)

开始工作:在窗口的消息中找到WM_VSCROLL消息,该消息将用于竖直滚动条。

先在窗口初始化函数OnInitDialog()中加入:

int ypos = GetScrollPos(SB_VERT);
 if (ypos !=0)
 ScrollWindow(0,ypos); //恢复窗口的垂直滚动区域
  
 SCROLLINFO vinfo; 
 vinfo.cbSize = sizeof(vinfo);
 vinfo.fMask = SIF_ALL;
 vinfo.nPage = 80;
 vinfo.nMax= 300;
 vinfo.nMin = 0;
 vinfo.nTrackPos = 0;
 vinfo.nPos = 0; 
 //设置垂直滚动条信息
 SetScrollInfo(SB_VERT,&vinfo);

对竖直滚动条进行初始化,然后就是在系统给定的消息函数OnVScroll中加入代码了:

void CScrollDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
 CRect rc;
 GetWindowRect(&rc);
 SCROLLINFO si = {sizeof(SCROLLINFO),SIF_PAGE|SIF_POS|SIF_RANGE|SIF_TRACKPOS, 0, 0, 0, 0,0};
  
 

 ::GetScrollInfo (m_hWnd, SB_VERT, &si);
 int MIN_VSCROLL_VALUE  = 0;
 int  MAX_VSCROLL_VALUE = si.nMax;

 int iInterval = 0;
 int Pos = si.nPos;
 switch (nSBCode)
 {
 case SB_LINEUP:
  Pos -= 20;
  break;
 case SB_PAGEUP:
  Pos -= 60;
  break;
 case SB_LINEDOWN:
  Pos += 20;
  break;
 case SB_PAGEDOWN:
  Pos += 60;
  break;
 case SB_TOP:
  Pos = MIN_VSCROLL_VALUE;
  break;
 case SB_BOTTOM:
  Pos = MAX_VSCROLL_VALUE;
  break;
 case SB_THUMBTRACK:
 case SB_THUMBPOSITION:
  Pos = si.nTrackPos;
  break;
 }
 if(Pos < MIN_VSCROLL_VALUE)
  Pos = MIN_VSCROLL_VALUE;
 else if(Pos >=(MAX_VSCROLL_VALUE-si.nPage))
 Pos = MAX_VSCROLL_VALUE  -  si.nPage;
 iInterval = Pos - si.nPos;
 if(0 != iInterval)
 {
  si.fMask = SIF_POS;
  si.nPos = Pos;
 
  ::SetScrollInfo (m_hWnd, SB_VERT, &si, TRUE);
  ScrollWindowEx(0, -iInterval, NULL, NULL,
   NULL, NULL, SW_SCROLLCHILDREN);
 }

 //Invalidate();//该重绘对话框的语句好像注释掉也没关系,还可以让对话框滚动
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

让滚动条显示用ShowScrollBar(SB_VERT,TRUE);

隐藏用ShowScrollBar(SB_VERT,FALSE);

调用输入法键盘需引入SIPAPI.h文件

SipShowIM(SIPF_ON);显示输入法软键盘

SipShowIM(SIPF_OFF);隐藏输入法软键盘

当一个Edit控件触发EN_SETFACUS事件时,可以设置显示输入法

当触发EN_KILLFACUS事件时,可以隐藏输入法

抱歉!评论已关闭.