利用上篇的文章《Windows Mobile上實現圖片任意角度旋轉》,可以實現效果非常絢麗的始終效果。每個始終我們需要三張圖片,鐘盤、時針、分針三張png圖片。
如:
圖片是從android中取出的。
實現代碼如下:
void DrawClock(HDC hdc, RECT rc)<br />{<br />SYSTEMTIME systemTime;</p><p>GetLocalTime(&systemTime);</p><p>IImage *pCurClockHour = NULL;<br />IImage *pCurClockMin = NULL;<br />ImageInfo imDialInfo;<br />ImageInfo imHourInfo;<br />ImageInfo imMinInfo;</p><p>LPBYTEpHourBuf = NULL;<br />LPBYTE pMinBuf = NULL;<br />POINT ptClockCenter;<br />RECT rcDial;<br />RECT rcHour;<br />RECT rcMin;</p><p>GetClientRect(g_hWnd, &rc);</p><p>HDC hdcOffSet = CreateCompatibleDC(hdc);<br />HBITMAP hbmpOffset = CreateCompatibleBitmap(hdc, rc.right - rc.left, rc.bottom - rc.top);<br />SelectObject(hdcOffSet, hbmpOffset);<br />FillRect(hdcOffSet, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH));<br />// Load the image from the JPG file.</p><p>if(pClockDial == NULL)<br />pImgFactory->CreateImageFromFile(TEXT("//clockgoog_dial.png"),&pClockDial);<br />if(pClockHour == NULL)<br />pImgFactory->CreateImageFromFile(TEXT("//clockgoog_hour.png"),&pClockHour);<br />if(pClockMin == NULL)<br />pImgFactory->CreateImageFromFile(TEXT("//clockgoog_minute.png"),&pClockMin);</p><p>/*<br />if(pClockDial == NULL)<br />pImgFactory->CreateImageFromFile(TEXT("//clockdroid2_dial.png"),&pClockDial);<br />if(pClockHour == NULL)<br />pImgFactory->CreateImageFromFile(TEXT("//clockdroid2_hour.png"),&pClockHour);<br />if(pClockMin == NULL)<br />pImgFactory->CreateImageFromFile(TEXT("//clockdroid2_minute.png"),&pClockMin);<br />*/<br />pClockDial->GetImageInfo(&imDialInfo);<br />rcDial.left = ((rc.right - rc.left) - imDialInfo.Width)/2 + rc.left;<br />rcDial.top = ((rc.bottom - rc.top) - imDialInfo.Height)/2 + rc.top;<br />rcDial.right = rcDial.left + imDialInfo.Width;<br />rcDial.bottom = rcDial.top + imDialInfo.Height;</p><p>ptClockCenter.x = rcDial.left + imDialInfo.Width/2;<br />ptClockCenter.y = rcDial.top + imDialInfo.Height/2;</p><p>RotateImage(pImgFactory, pClockHour, pCurClockHour, pHourBuf, systemTime.wHour * 6 *3.14/180);<br />RotateImage(pImgFactory, pClockMin, pCurClockMin, pMinBuf, (systemTime.wMinute * 6 + systemTime.wSecond/10) *3.14/180);</p><p>pCurClockHour->GetImageInfo(&imHourInfo);<br />pCurClockMin->GetImageInfo(&imMinInfo);</p><p>rcHour.left = ptClockCenter.x - imHourInfo.Width/2;<br />rcHour.right = rcHour.left + imHourInfo.Width;<br />rcHour.top = ptClockCenter.y - imHourInfo.Height/2;<br />rcHour.bottom = rcHour.top + imHourInfo.Height;</p><p>rcMin.left = ptClockCenter.x - imMinInfo.Width/2;<br />rcMin.right = rcMin.left + imMinInfo.Width;<br />rcMin.top = ptClockCenter.y - imMinInfo.Height/2;<br />rcMin.bottom = rcMin.top + imMinInfo.Height;</p><p>pClockDial->Draw(hdcOffSet, &rcDial, NULL);<br />pCurClockHour->Draw(hdcOffSet, &rcHour, NULL);<br />pCurClockMin->Draw(hdcOffSet, &rcMin, NULL);</p><p>pCurClockHour->Release();<br />pCurClockMin->Release();</p><p>delete pHourBuf;<br />delete pMinBuf;<br />BitBlt(hdc, rc.left,rc.top, rc.right-rc.left, rc.bottom - rc.left, hdcOffSet, 0,0,SRCCOPY);</p><p>DeleteDC(hdcOffSet);<br />DeleteObject(hbmpOffset);<br />}
最終效果: