博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
给白板属性窗口设置滚动条
阅读量:6978 次
发布时间:2019-06-27

本文共 6672 字,大约阅读时间需要 22 分钟。

以下是转自他人的SCROLLINFO的一些信息

在刚开始使用SCROLLINFO结构时感觉很不顺手,尤其其中的成员fMask理解不太深刻,经过查询资料才理解一二。

  在使用滚动条功能时,如果要设置它的范围和位置可以用以前的函数,例如:SetScrollRange()、 SetScrollPos()、GetScrollRange()、GetScrollPos()等,但目前通常使用SetScrollInfo()与 GetScrollInfo(),使用这两个函数就要用到SCROLLINFO结构。 

  

  可以先定义一个SCROLLINFO结构变量si,用&si作为以上两个函数的参数。同BeginPaint()中的&ps、GetTextMetrics()中的&tm等,这些结构都是通过这些函数被填充各域或取得各域的值。BeginPaint是填充ps的各域的值,GetTextMetrics是取得tm结构各域的值,而 SetScrollInfo()与GetScrollInfo()分别填充和取得。

  

  无论是Set还是Get,都得先设置si结构的第一个域的值,即赋给cbSize结构的大小。之后根据设置的fMask域的值进行Set或Get,当Set时,需要根据fMask的值将相关的域填充后再调用 SetScrollInfo(),这样si结构就被Set成功。当Get时,直接调用GetScrollInfo(),具体能使用哪些域的值是根据所设置的fMask域的值定的。

 

  如果要设置滚动条的范围和页面大小时,可编写以下代码:

      si.cbSize = sizeof (SCROLLINFO) ; 
      si.cbMask = SIF_RANGE | SIF_PAGE ; 
      si.nMin = 0 ; 
      si.nMax = NUMLINES - 1 ; 
      si.nPage = cyClient / cyChar ; 
      SetScrollInfo (hwnd, SB_VERT, &si, TRUE) ;

    而若要用到滚动条的位置时,可以这样使用:

    先si.cbSize = sizeof (si) ; 
    si.fMask = SIF_ALL ; // 表示Get后将使用si结构的位置、页面大小等量
    GetScrollInfo (hwnd, SB_VERT, &si)

  然后就可直接使用si.nPos、si.nPage、si.nTrackPos等量,这些量就是从si结构中通过Get函数获得的,

 

成员说明:

cbSize: SCROLLINFO结构长度字节数,该值在设置和查询参数时都必须填写。
fMask: 指定结构中的哪些成员是有效,该值共有如下5种选择,可以选择多种用“OR”组合起来,该值在
设置和查询参数时都必须填写。
SIF_ALL      :整个结构都有效
SIF_DISABLENOSCROLL:该值仅在设定参数时使用,视控件参数设定的需要来对本结构的成员进行取舍。
SIF_PAGE      :nPage成员有效
SIF_POS      :nPos成员有效
SIF_RANGE     :nMin和nMax成员有效
nMin:滚动范围最小值
nMax:滚动范围最大值
nPage:页尺寸,用来确定比例滚动框的大小
nPos:滚动框的位置
nTrackPos:拖动时滚动框的位置,该参数只能查询,不能设置。

 

 

下面代买是给白板的属性面板做滚动条代码:

1、CWBFunctionAttributeDlg.h定义

SCROLLINFO m_si;//声明一个滚动条

void CWBFunctionAttributeDlg::OnSize(UINT nType, int cx, int cy)

{
CDialog::OnSize(nType, cx, cy);

// TODO: 在此处添加消息处理程序代码

CRect FuncDlgRt;
g_pWhiteBoardView->GetWBFunctionDlg()->GetClientRect(FuncDlgRt);
CRect attrDlgRect;
GetClientRect(attrDlgRect);
//滚动条的信息设置
m_si.cbSize = sizeof (SCROLLINFO);
m_si.fMask = SIF_ALL;
m_si.nMin = 0;
m_si.nMax =600;

m_si.nPage = 200; //滚动条一整页的高度,在不同的长短

m_si.nPos = 0;
SetScrollInfo(SB_VERT,&m_si,1);
ShowScrollBar(SB_VERT,TRUE);
if (FuncDlgRt.Height() > 500)
{
ShowScrollBar(SB_VERT,FALSE);
}
}

1  void CWBFunctionAttributeDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)  2  {  3      // TODO: 在此添加消息处理程序代码和/或调用默认值  4      SCROLLINFO scrollinfo;  5      GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);    6      switch (nSBCode)    7      {    8      case SB_BOTTOM:   9          ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMax));  10          UpdateWindow(); 11          scrollinfo.nPos = scrollinfo.nMax;   12          SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);   13          break;   14      case SB_TOP:   15          ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMin));  16          UpdateWindow(); 17          scrollinfo.nPos = scrollinfo.nMin;  18          SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);   19          break;  20      case SB_LINEUP:   21          {     22              if (scrollinfo.nPos - scrollinfo.nMin  == 0) 23              { 24                  break; 25              } 26              else if (scrollinfo.nPos - scrollinfo.nMin < 20) 27              { 28                  ScrollWindow(0,(scrollinfo.nPos - scrollinfo.nMin)); 29                  scrollinfo.nPos = scrollinfo.nMin; 30                  SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); 31                  break; 32              } 33              else if (scrollinfo.nPos - scrollinfo.nMin >= 20) 34              { 35                  scrollinfo.nPos -= 20; 36                  ScrollWindow(0,20); 37                  UpdateWindow(); 38                  SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); 39                  break; 40              } 41              //m_bLineDown = TRUE; 42              //scrollinfo.nPos -= 20; 43              //if (scrollinfo.nPos
= 20) 70 { 71 scrollinfo.nPos += 20; 72 ScrollWindow(0,-20); 73 UpdateWindow(); 74 SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); 75 break; 76 } 77 else if (scrollinfo.nMax - scrollinfo.nPos - scrollinfo.nPage < 20) 78 { 79 ScrollWindow(0,-(scrollinfo.nMax - scrollinfo.nPos) ); 80 UpdateWindow(); 81 scrollinfo.nPos = scrollinfo.nMax; 82 SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); 83 break; 84 } 85 } 86 //case SB_PAGEUP: 87 // { 88 // m_bLineDown = TRUE; 89 // UINT a = scrollinfo.nPos; 90 // scrollinfo.nPos -= scrollinfo.nPage; 91 // if (scrollinfo.nPos
(int)(scrollinfo.nMax - scrollinfo.nPage)) 113 // { 114 // int offset = 0;115 // offset = scrollinfo.nMax - scrollinfo.nPos ;116 // scrollinfo.nPos = scrollinfo.nMax;117 // SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); 118 // ScrollWindow(0,-offset); 119 // UpdateWindow();120 // break; 121 // }122 // else123 // {124 // SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); 125 // ScrollWindow(0,-((int)scrollinfo.nPage));126 // UpdateWindow();127 // break; 128 // } 129 // }130 case SB_ENDSCROLL: 131 break; 132 case SB_THUMBPOSITION: 133 break; 134 case SB_THUMBTRACK: 135 { 136 //校准137 int offset = (int)nPos -(int)scrollinfo.nPos;138 if (offset > 0)//向下移动139 {140 //if ( (nPos + scrollinfo.nPage) > scrollinfo.nMax )//越过最大值141 //{142 // offset = (scrollinfo.nMax -scrollinfo.nPage + 1) - scrollinfo.nPos;143 //}144 ScrollWindow(0,-offset); 145 UpdateWindow();146 scrollinfo.nPos = scrollinfo.nPos + offset; 147 SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);148 }149 else if (offset < 0)150 {151 //if (nPos < scrollinfo.nMin)152 //{153 // offset = scrollinfo.nMin - scrollinfo.nPos;154 //}155 ScrollWindow(0,-offset); 156 UpdateWindow();157 scrollinfo.nPos = scrollinfo.nPos + offset; 158 SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);159 } 160 break; 161 }162 }163 CDialog::OnVScroll(nSBCode, nPos, pScrollBar);164 }
View Code

 

 

转载地址:http://ygkpl.baihongyu.com/

你可能感兴趣的文章
my项目的总结2015.8.26编
查看>>
Linux 基金会宣布红队项目,致力于孵化开源安全工具
查看>>
索尼发布无人机相机专利,支持眼部对焦
查看>>
js字符串方法
查看>>
sql server几种读写分离方案的比较
查看>>
Ubuntu阿里云搭建Mono.net环境
查看>>
一对一直播app源码功能操详解方案分享
查看>>
liunx软件安装
查看>>
CentOS7系统下修改网卡为eth0
查看>>
vsftpd企业应用快速部署文档
查看>>
Linux下将Mysql和Apache加入到系统服务里的方法
查看>>
数通手稿留档——BGP
查看>>
AIX5.3安装bash shell
查看>>
Zabbix(六):项目实战之--自动发现nginx调度器及后端web服务集群、自定义参数监控...
查看>>
Python optionParser模块的使用方法
查看>>
Database Appliance并非Mini版的Exadata-还原真实的Oracle Unbreakable Database Appliance
查看>>
mysql 新增 删除用户和权限分配
查看>>
Linux入门(四)
查看>>
python之深浅拷贝
查看>>
VMware Horizon View 7: Instant Clone Desktop Pool [Part 8]
查看>>