基于VC++ PNG按钮的实现【4】

graph.DrawImage(m_pImageClock1, points, 3);

       bFly=!bFly;

// 坐标原点在表盘中央

       int OxyX=140;//m_BakWidth/2+8;

       int OxyY=90;//m_BakHeight/2+10;

// 得到系统时间

       SYSTEMTIME SystemTime;   // address of system time structure

       GetLocalTime(&SystemTime);

//Matrix matrixH(a,b,c,d,tx,ty);

//Matrix 的计算其实很简单,就只有两行的公式:

//X’ = a*X + c*Y + tx; Y’ = b*X + d*Y + ty;

//a = 控制 X 的宽度 ;b = 控制 Y 的倾斜 ;c = 控制 X 的倾斜 ;d = 控制 Y 的高度

//tx = 控制 X 坐标位置 ;ty = 控制 Y 坐标位置

Matrix matrixH(1,0,0,1,OxyX,OxyY); // 定义一个单位矩阵,坐标原点在表盘中央 // 参数定义为宽度比例为 1 ,无任何的倾斜,高度比例 1xy 坐标为 100

//Math.rotate((50/180)*Math.PI) , 这里是要求旋转 50

// 公式为: X' = cos(50)*X + sin(50)*Y + tx; Y' = -sin(50)*X + cos(50)*Y + ty;

matrixH.Rotate(SystemTime.wHour*30+SystemTime.wMinute/2.0-180); // 时针旋转的角度度

       Point pointsH[] = { Point(0, 0),Point(m_HourWidth, 0),Point(0, m_HourHeight)};

// 该矩形是 / 被旋转的对象(注意:三个点可以确定一个矩形)

//Matrix.translate(tx1, ty2); // 这里的 tx1ty1 是所要递增或递减原有 txty 的数值,相当 // 平移旋转中心坐标

       matrixH.Translate(-m_HourWidth/2,-m_HourHeight/6);

       matrixH.TransformPoints( pointsH, 3); // 用该矩阵转换 points, 即将矩形转换完毕并 保存在这三个点中

graph.DrawImage (m_pImageHHour,pointsH, 3);// 显示该图片在 pointsH 矩形区域中

Matrix matrixM(1,0,0,1,OxyX,OxyY); // 定义一个单位矩阵,坐标原点在表盘中央

       matrixM.Rotate(SystemTime.wMinute*6-180); // 分针旋转的角度度

       Point pointsM[] = { Point(0, 0),Point(m_MinuWidth, 0),Point(0, m_MinuHeight)};

       matrixM.Translate(-m_MinuWidth/2,-m_MinuHeight/6);

       matrixM.TransformPoints( pointsM, 3); // 用该矩阵转换 pointsM

       graph.DrawImage (m_pImageHMinu,pointsM, 3);

   Matrix matrix(1,0,0,1,OxyX,OxyY); // 定义一个单位矩阵,坐标原点在表盘中央

       matrix.Rotate(SystemTime.wSecond*6-180); // 秒针旋转的角度度

       Point pointsS[] = { Point(0, 0),Point( m_SecWidth,0),Point(0,m_SecHeight )};

       matrix.Translate(-m_SecWidth/2,-m_SecHeight/7);

       matrix.TransformPoints( pointsS, 3); // 用该矩阵转换 pointsS

       graph.DrawImage (m_pImageHSec,pointsS, 3);

// 下面是时间数字显示,他的工作原理是截取原始图片上的图放在相应位置,比如 1 ,:图片 // 都是截取过来的

// 函数: Status DrawImage( Image* image, INT x, INT y, INT srcx, INT srcy,

// INT srcwidth, INT srcheight, Unit srcUnit);

// 参数说明 (x,y) 用来指定图像 image 显示的位置,这个位置和 image 图像的左上角点相对应。

// srcxsrcysrcwidth srcheight 用来指定要显示的源图像的位置和大小, srcUnit 用来指 // 定所使用的单位,默认时使用 PageUnitPixel ,即用像素作为度量单位

//H

       graph.DrawImage(m_pImageNum,0, 0, 14*(SystemTime.wHour/10), 0,14,23,UnitPixel); // 该函数从 m_pImageClock 中剪切指定 rect 中的像素 draw 到指定位置

       graph.DrawImage(m_pImageNum,20,0,14*(SystemTime.wHour%10),0,14,23,UnitPixel); // 该函数从 m_pImageClock 中剪切指定 rect 中的像素 draw 到指定位置

       graph.DrawImage(m_pImageNum,20*2,0, 140, 0,14,23,UnitPixel);

// 该函数从 m_pImageClock 中剪切指定 rect 中的像素 draw 到指定位置 M

       graph.DrawImage(m_pImageNum,20*3,0,14*(SystemTime.wMinute/10),0,14,23,UnitPixel); // 该函数从 m_pImageClock 中剪切指定 rect 中的像素 draw 到指定位置

       graph.DrawImage(m_pImageNum,20*4,0,14*(SystemTime.wMinute%10), 0,14,23,UnitPixel); // 该函数从 m_pImageClock 中剪切指定 rect 中的像素 draw 到指定位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值