高仿朝夕日历的月视图的demo


https://github.com/senlinxuefeng/RSQMonthCalendar

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
日历控件类名:CalendarMonthControl 开发平台:Visual Studio 2008 字符集:使用 Unicode 字符集 此项目的源码涉及到了以下方面的知识和技术: 1. Windows窗体坐标(逻辑坐标,客户区坐标概念)。 2. 图像自绘(不是MFC来绘制而是自已来管理一切)。 3. 双缓冲技术运用(有时侯自绘的控件可能会有“闪烁感”,在这里你可以找到解决方法)。 4. STL运用(软件开发第一准则:“不要重复造轮子”)。 5. DirectUI思想(思想决定一切)。 6. C++设计模式(清晰的构架对一个项目来说是至关重要的,而无论这个项目大小) 项目介绍: 虽然就技术上来讲重新设计和开发一个类似于Windows时间控件的技术并不难,但是如果能够在能够很好很方便的运行的基础上再考虑到美观,易用,可扩展性,构架清晰等方面那也不算太容易。从某种意义上来说这个项目算得上是STL的一个小作品,因为此项目所使用的数据结构和算法全部是由STL所提供的,由于大量使用STL来进行数据处理,以及在图像绘制方面使用了流行的双缓冲技术所以整个系统能够得到极高的性能,当然即便如此此项目仍然还有许多可以优化的空间,它的性能还没有被发挥到最优,例如显示份的单元格是由vector动态的push_back,但是如果你认真分析后会发现实际上这些单元格是固定的,也就是说在构造函数中就可以new一个固定大小的内存空间来供vector使用,而不用每次都动态的push_back。我在整个项目的设计上花了一些时间来保证代码的层次结构清晰,同时也使用了一些C++里面的高级技术,例如多重继承,重载,虚函数,虽然不多,但是尽量保证了恰到好处。 作为一个程序开发的新手,或许能够从这个项目中得到一些思路。实际上这个项目被重写过一次,第一次的设计完全是面向过程的,谈不上设计,因为整个项目就是一个类,或许这段代码在以前可能称得上算是一个“牛X”的作品,但是在设计模式大行其道的今天最多算得上是污染开发人员视觉的产物,优其可读性和扩展性均不能达到要求,这一版本是完全基于面向对象的思想来进行设计的,所以比上一个版本更容易阅读也更具层次感觉。 此项目源代码虽然不多,但是在许多地方使用到的一些技巧仍然值得新手学习,例如在与用户交互事件设计及处理方面(OnClick,OnMove)就使用了DirectUI的思想,控件中将份和年份的区域当作一个逻辑区域来对待,将每一天或每一看作为一块小的逻辑区域(用RECT标识),最终将这些区域的逻辑图形绘制到一个DC上,同时使用统一的数据管理对象来管理这些区域的事件及处理(极到位的运用了C++类设计原则的部分思想),这样一方面保证了绘制效率,另一方面增强了控件的可扩展性和可管理。这也正是DirectUI的核心思想。 最后非常感谢你花时间来阅读这些文字,同时希望你认为花费这些时间是值得的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值