HybridClock 详解
Charles Petzold在Ch8中介绍了旋转和偏移的使用,最经典的就是HybridClock程序了,说实话,他的所有的程序的思想几乎都可以在《Windows 程序设计》中找到哦,好了,看看他是怎么写的吧;
先是最核心的部分,秒针/分针/时针 的角度计算:
咋一看作者的代码有点难懂,其实这是他化简后的代码,这样可以减少cpu计算量;
我把它还原为最初的思想:
对于秒针:60秒为360度,按比例就是seconds/60*360;
angle = (dt.Second / 60.0) * 360; //就相当于dt.Second*6
对于分针:60分钟为360度,按比例就是minutes/60*360;
angle = (dt.Minute / 60.0) * 360 + angle/360.0/60.0*360; //后半部对于angle/360.0就是计算多少分钟,然后/60.0看看是60分钟的几分之一,然后*360计算角度,化简后就是:angle = 6 * dt.Minute + angle / 60;
对于时针:12小时为360度,按比例就是hours/12*360
angle = (((dt.Hour + angle / 360.0) % 12) / 12.0) * 360 ; //式子中的angle/360.0是计算分钟转为多少个小时,然后同上,化简过程:
//搞定了角度计算,然后就基本ok了。
接下来是TextBlock设置 :
先看看Charles Petzold:
我觉得他的代码是非常好的,考虑到了美观,但是我觉得还是越简单越好吧:
看看效果: