织梦CMS - 轻松建站从此开始!

罗索

Windows Mobile上实现绚丽时钟效果

落鹤生 发布于 2010-07-29 12:09 点击:次 
利用上篇的文章《 Windows Mobile 上实现图片任意角度旋转 》,可以实现效果非常绚丽的始终效果。每个始终我们需要三张图片,钟盘、时针、分针三张 png 图片。
TAG:

利用上篇的文章《Windows Mobile上实现图片任意角度旋转》,可以实现效果非常绚丽的始终效果。每个始终我们需要三张图片,钟盘、时针、分针三张png图片。

如下图:

图片是从android中取出的。

实现代码如下:

  1. void DrawClock(HDC hdc, RECT rc) 
  2.     SYSTEMTIME systemTime; 
  3.  
  4.     GetLocalTime(&systemTime); 
  5.  
  6.     IImage *pCurClockHour = NULL; 
  7.     IImage *pCurClockMin = NULL; 
  8.     ImageInfo imDialInfo; 
  9.     ImageInfo imHourInfo; 
  10.     ImageInfo imMinInfo; 
  11.  
  12.     LPBYTE  pHourBuf = NULL; 
  13.     LPBYTE  pMinBuf = NULL; 
  14.     POINT ptClockCenter; 
  15.     RECT  rcDial; 
  16.     RECT  rcHour; 
  17.     RECT  rcMin; 
  18.  
  19.     GetClientRect(g_hWnd, &rc); 
  20.  
  21.  
  22.     HDC hdcOffSet = CreateCompatibleDC(hdc); 
  23.     HBITMAP hbmpOffset = CreateCompatibleBitmap(hdc,
  24.  rc.right - rc.left, rc.bottom - rc.top); 
  25.     SelectObject(hdcOffSet, hbmpOffset); 
  26.     FillRect(hdcOffSet, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH)); 
  27.     // Load the image from the JPG file. 
  28.      
  29.     if(pClockDial == NULL) 
  30. pImgFactory->CreateImageFromFile(TEXT("\\clockgoog_dial.png"),&pClockDial); 
  31.     if(pClockHour == NULL) 
  32. pImgFactory->CreateImageFromFile(TEXT("\\clockgoog_hour.png"),&pClockHour); 
  33.     if(pClockMin == NULL) 
  34. pImgFactory->CreateImageFromFile(TEXT("\\clockgoog_minute.png"),&pClockMin); 
  35.  
  36.     /* 
  37.     if(pClockDial == NULL) 
  38. pImgFactory->CreateImageFromFile(TEXT("\\clockdroid2_dial.png"),&pClockDial); 
  39.     if(pClockHour == NULL) 
  40. pImgFactory->CreateImageFromFile(TEXT("\\clockdroid2_hour.png"),&pClockHour); 
  41.     if(pClockMin == NULL) 
  42. pImgFactory->CreateImageFromFile(TEXT("\\clockdroid2_minute.png"),&pClockMin); 
  43.     */ 
  44.     pClockDial->GetImageInfo(&imDialInfo); 
  45.     rcDial.left = ((rc.right - rc.left) - imDialInfo.Width)/2 + rc.left; 
  46.     rcDial.top = ((rc.bottom - rc.top) - imDialInfo.Height)/2 + rc.top; 
  47.     rcDial.right = rcDial.left + imDialInfo.Width; 
  48.     rcDial.bottom = rcDial.top + imDialInfo.Height; 
  49.  
  50.     ptClockCenter.x = rcDial.left + imDialInfo.Width/2; 
  51.     ptClockCenter.y = rcDial.top + imDialInfo.Height/2; 
  52.  
  53.     RotateImage(pImgFactory, pClockHour, pCurClockHour,
  54.  pHourBuf, systemTime.wHour * 6 *3.14/180); 
  55.     RotateImage(pImgFactory, pClockMin, pCurClockMin,
  56.  pMinBuf, (systemTime.wMinute * 6 + systemTime.wSecond/10) *3.14/180); 
  57.      
  58.     pCurClockHour->GetImageInfo(&imHourInfo); 
  59.     pCurClockMin->GetImageInfo(&imMinInfo); 
  60.      
  61.     rcHour.left = ptClockCenter.x - imHourInfo.Width/2; 
  62.     rcHour.right = rcHour.left + imHourInfo.Width; 
  63.     rcHour.top = ptClockCenter.y - imHourInfo.Height/2; 
  64.     rcHour.bottom = rcHour.top + imHourInfo.Height; 
  65.  
  66.     rcMin.left = ptClockCenter.x - imMinInfo.Width/2; 
  67.     rcMin.right = rcMin.left + imMinInfo.Width; 
  68.     rcMin.top = ptClockCenter.y - imMinInfo.Height/2; 
  69.     rcMin.bottom = rcMin.top + imMinInfo.Height; 
  70.      
  71.     pClockDial->Draw(hdcOffSet, &rcDial, NULL); 
  72.     pCurClockHour->Draw(hdcOffSet, &rcHour, NULL); 
  73.     pCurClockMin->Draw(hdcOffSet, &rcMin, NULL); 
  74.  
  75.     pCurClockHour->Release(); 
  76.     pCurClockMin->Release(); 
  77.      
  78.     delete  pHourBuf; 
  79.     delete  pMinBuf; 
  80.     BitBlt(hdc, rc.left,rc.top, rc.right-rc.left,
  81.  rc.bottom - rc.left, hdcOffSet, 0,0,SRCCOPY); 
  82.  
  83.     DeleteDC(hdcOffSet); 
  84.     DeleteObject(hbmpOffset); 

最终效果:

 

(jinhaijian)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201007/9898.html]
本文出处:CSDN博客 作者:jinhaijian
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容