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

原文:http://115610536.blog.163.com/blog/static/1912805920091241858948/

 

准备工作:加个基于对话框的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事件时,可以隐藏输入法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值