当前位置: 首页 > news >正文

用vc++做滚动条控件

  首先用应用向导产生一名为scro的基于对话框的应用,再利用对话框编辑器加入两个一样的水平滚动条,两个滚动条的id分别取idc—scr1idc—scr2,结果如下图,将其作为本文的示例。

  对话框编辑器虽然允许将滚动条控件加进对话框中,而且,类向导允许加入数据成员,但要使这两个水平滚动条工作,还必须加进一些代码。就本例程序,当用户拖动滚动块或用鼠标滚动箭头时,滚动条就会向对话框发送WM_HSCROLL消息,对话框消息控制函数必须对这一消息进行处理,然后将滚动块定位到相应的位置上。
  一般情况下,对话框中的每一控件都有自己独立的消息控制函数,但滚动条控件则有点不同,因为对话框中所有的水平滚动条都只有一个WM_HSCROLL消息控制函数,而所有的垂直滚动条都只有一个WM_HSCROLL消息控制函数。如果对话框中只有一个水平(或垂直)滚动条,则不会出现什么问题,问题是本例程序有一特殊之处,笔者有意设置了两个水平滚动条,可按前述都用一个WM_HSCROLL消息控制函数,所以程序必须能识别出哪个滚动条在发送消息。下面是具体步骤。

1.定义滚动范围的最大值和最小值。
  在scrodlg.h类声明中的最上面加入下面两行。

  enum {nmin=0};
  enum {nmax=100};

2.修改oninitdialog函数,初始化滚动范围,决定那一个滚动条发送消息。

// todo: add extra initialization here
  cscrollbar* psb = (cscrollbar*) getdlgitem(idc—scr1);
  psb-〉setscrollrange(nmin, nmax);
  psb = (cscrollbar*) getdlgitem(idc_scr2);
  psb-〉setscrollrange(nmin, nmax);

3.利用classwizardcscrodlg中加入滚动条消息控制函数,即选择wm—hscroll消息,然后加进onhscroll成员函数,并在其中加入如下代码:

  void cscrodlg::onhscroll(uint nsbcode, uint npos, cscrollbar* pscrollbar) 
  {// todo: add your message handler code here and/or call default
    int ntemp1, ntemp2;
    ntemp1 = pscrollbar-〉getscrollpos();
    switch(nsbcode) 
    { 
      case sb—thumbposition:          pscrollbar-〉setscrollpos(npos);          break;       case sb—lineleft: // 左按钮          ntemp2 = (nmax - nmin) / 10; //划为10等份          if ((ntemp1 - ntemp2) 〉 nmin)
         {
            ntemp1 -= ntemp2;
         }          
else
         {
            ntemp1 = nmin;
         }          pscrollbar-〉setscrollpos(ntemp1);          
break;       case sb—lineright: // 右箭头按钮          ntemp2 = (nmax - nmin) / 10;          if ((ntemp1 + ntemp2) 〈 nmax)
         {
             ntemp1 += ntemp2;
         }          
else
         {
             ntemp1 = nmax;
         }          pscrollbar-〉setscrollpos(ntemp1);          
break;
    }     cdialog::onhscroll(nsbcode, npos, pscrollbar);}

4.现在可以编译、测试程序了。

转载于:https://www.cnblogs.com/xing901022/archive/2012/10/30/2747103.html

相关文章:

  • Qt学习之路(48): 自定义委托
  • 9520个大气笔刷!902个无缝叠加图案!!770个质感纹理!!!
  • Qt学习之路(46): 自定义model之二
  • 解决EntityFramework数据库无法自动迁移解决方法
  • Qt学习之路(45): 自定义model之一
  • 编译原理-词法分析器(DFA,C语言描述,可分析C/C++词法)
  • SQL 表操作
  • Qt学习之路(44): QSortFilterProxyModel
  • UIimage图片在程序Documents目录下的存取
  • Qt学习之路(43): QDirModel
  • java “==”和“ equals”以及instanceof的区别
  • Qt学习之路(42): QStringListModel
  • The Clocks
  • 发布app store流程
  • Qt学习之路(41): QTableWidget
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 「译」Node.js Streams 基础
  • Apache的基本使用
  • chrome扩展demo1-小时钟
  • css选择器
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • github指令
  • JavaScript的使用你知道几种?(上)
  • Redash本地开发环境搭建
  • RxJS: 简单入门
  • Spring Cloud中负载均衡器概览
  • ubuntu 下nginx安装 并支持https协议
  • Vue2 SSR 的优化之旅
  • 包装类对象
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 聚类分析——Kmeans
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 类orAPI - 收藏集 - 掘金
  • 利用DataURL技术在网页上显示图片
  • 项目实战-Api的解决方案
  • 新版博客前端前瞻
  • 原生JS动态加载JS、CSS文件及代码脚本
  • k8s使用glusterfs实现动态持久化存储
  • 阿里云API、SDK和CLI应用实践方案
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #NOIP 2014# day.1 T2 联合权值
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (04)odoo视图操作
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (四)JPA - JQPL 实现增删改查
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .htaccess 强制https 单独排除某个目录
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 指南:抽象化实现的基类
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...