基于MFC的桌面时钟应用程序

前言:

  其实在做这个应用程序之前是已经接触过MFC,之前的对于MFC的应用只是绘制了简单的图形界面用于承载核心的局域网聊天的程序的界面显示而已,主体部分在于核心的局域网聊天的实现。

  但是这次对于MFC的应用则是为了更加了解对于MFC的各种接口的应用以及如何自己去重载那些由微软公司已经写好的各种控件的改变。那么这次桌面应用程序则是用这个程序去表达我想要绘制的图形界面罢了,这次的答辩内容则核心在于如何使用MFC的Ui界面以及代码去实现一个简单的图形界面(我也想去绘制的更好,但是受制于自身的水平以及教程稀缺的原因只能说尽可能去实现一些功能吧)

主界面CLOCK:

    主界面是一个很简单的窗口,也不需要什么逻辑,就只有两个按钮一个标题框,一个背景图。

  实现的功能:

  •     添加背景图片,也就是在整个窗口添加一张自适应窗口大小的背景图。
  •     添加两个按钮,并且为两个按钮添加相应的响应事件,使得其点击之后会触发不同的事件,于此同时实现了对按钮添加的背景图片以及按钮的提示文字功能(就是当按钮获得鼠标的焦点时,会显示这个按钮响应的按钮事件)  
  •     最后就是一个标题框,显示出这个应用程序的标题,为它只做了背景透明处理以及文字字体和颜色改变处理。

DigitalClock:

  这是第二个界面,这个界面主要实现的功能便是绘制一个数字显示的时钟(这个界面是通过MFC的Ui图形界面绘制的)同时自己附带了一个由MFC自己提供的日历控件calendar,日历控件是由MFC本身提供就不多做介绍,度娘一下应该可以找到很多帮助你实现的方法,但是还是要提到一点是这个控件是可以自己全部改写的,包括里面已经实现的那些显示(只要你的能力足够的话,其实感觉自身努力一下也应该可以自己写一个的,但是时间不够以及志不在于此的原因所以放弃了)

主要的功能实现:

  •      数字的0-9绘制,0-9的绘制主要是通过七段数的方法来绘制的,我们大家都知道显示一个标准的方块数字最多由七段横和竖的结合便能绘制出来,首先要做的就是绘制七段数,将七段数用点到点的定位一段一段的绘制,但是那样的画出来的会是一条一条线段,我们给予美化的话就是将其绘制成双线段边角有倾斜的线段,这个采用同样的方法,但是绘制一个封闭图形后要对其中的空白部分进行填充颜色,这样七段数就算是绘制完成了
  •     我们知道在时间小时分钟秒钟之间都是有冒号的,我们绘制" : "的方法就是绘制以一个点为圆心绘制一个圆,然后对绘制出来的两个圆进行颜色填充就完成了。
  •     最后要做的就是显示时间了,首先要做的是对数字和冒号进行定位,将其分为3个部分分别是 Hour:Minute:Second,进行分别定位,位置选定好之后就是获取当前的当前的时间通过C++的CTime函数能够获取系统当前时间,然后分别赋值给所需要显示的位置去,这样就完成了
  •    最后我们知道时间不断的在改变,我们怎么也让应用程序上也不断改变时间了?这个很简单,给一个响应事件,每次经过1000ms = 1s就发送一个请求去重新获取时间便可以了。
  •     隐藏和取消按钮,添加响应事件,自己写一个函数,函数体部分基本都是去调用相应的接口就行了,每次点击按钮触发相应的函数事件就可以实现这些功能
  •    改变了窗口标题和窗口的图标,添加了菜单栏,但是这个的菜单栏的功能并没有实现,只是做了一个模型放在那里(这个会在后面提到),这基本就是这个应用程序的功能了。

PointClock:

    这是第三个界面,这个界面呢就是绘制了一个指针式的时钟,就是钟盘式的时钟,这个界面是通过纯手工代码实现,其主旨在于一方面提高自己的码代码的能力,二是更加熟悉MFC的各种接口的调用以及各种控件如何用代码去实现,这个在用代码去实现界面的难度上加大,但是却没有很复杂的定位和逻辑难度,但是在实现放大缩小时的定位出现了问题,应该是跟我强行定位到界面中心有关的,但是后来没有时间,就没有改了。

实现的功能:

  •    首先是整个界面的绘制,我定义了800*600的矩形界面
  •    其次是钟面的和指针的绘制,先定位界面的中心,以界面中心为圆心绘制一个圆,然后将1-12数字均匀分布在钟面上,这是通过三角函数计算出来的均匀分布点,然后以圆心为起点,以上面计算出来的角度和不同的长度分别绘制3根指针
  •     然后便是添加响应时间,每隔1000ms = 1s进行一次事件改变即可,在这里我就不做过多的赘述,有兴趣的可以博客下方评论找我索要源码
  •    最后便是各种接口的调用去实现标题的改变,窗口的图标的改变,菜单栏的中的各种功能的实现,其实大部分我都是只是直接调用了MFC提供的接口,而没有对其中的内容进行改变,只是实现一下这些功能的实现罢了,如何要实现相对应你的应用程序的功能的话,需要你自己去重新写其中的核心代码,这点就是考验自身水平的时候了

   这篇博客其中倘若有错误,希望广大网友指出以便我更改,以免误导他人...在这里我就不多介绍代码的实现,可能由于VS版本的不同,对于MFC的各种功能的实现也有所转变,有兴趣或者疑问的可以与我交流一下,一起共同进步。

   最后还给大家一些建议,倘若正在学习MFC的同学,而又非必须学习内容,大家是可以转战Qt的,毕竟MFC的学习资料较少,已经近乎被大家放弃了,另外其冗余的操作和繁琐的代码实现都是一般学习编程人员很难接受的。

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值