求MFC按钮旋转(90度),和位图旋转的实现方式,有代码更好解决方案

求MFC按钮旋转(90度),和位图旋转的实现方式,有代码更好
RT

------解决方案--------------------
位图旋转(旋转角度为A):
double x1,x2,x3; 
double y1,y2,y3;
double srcX,srcY; 
double DstWidth; 
double DstHeight; 
double minWidth,minHeight; 
double maxWidth,maxHeight;
HBITMAP newBitmap;
HDC dcDst;
x1 = -m_srcHeight* sinA; 
y1 = m_srcHeight * cosA; 
x2 = m_srcWidth * cosA - m_srcHeight * sinA; 
y2 = m_srcHeight * cosA + m_srcWidth * sinA; 
x3 = m_srcWidth * cosA; 
y3 = m_srcWidth * sinA; 
minWidth = x3>(x1>x2?x2:x1)?(x1>x2?x2:x1):x3; 
minWidth = minWidth>0?0:minWidth; 
minHeight = y3>(y1>y2?y2:y1)?(y1>y2?y2:y1):y3; 
minHeight = minHeight>0?0:minHeight; 
maxWidth = x3>(x1>x2?x1:x2)?x3:(x1>x2?x1:x2); 
maxWidth = maxWidth>0?maxWidth:0; 
maxHeight = y3>(y1>y2?y1:y2)?y3:(y1>y2?y1:y2); 
maxHeight = maxHeight>0?maxHeight:0; 
DstWidth = maxWidth - minWidth; 
DstHeight = maxHeight - minHeight; 
dcDst = CreateCompatibleDC(dcSrc); 
newBitmap = CreateCompatibleBitmap(dcSrc,(int)DstWidth,(int)DstHeight);
SelectObject(dcDst,newBitmap); 
for( int I = 0 ;I<DstHeight;I++) 

for(int J = 0 ;J< DstWidth;J++) 

srcX = (J + minWidth) * cosA + (I + minHeight) * sinA; 
srcY = (I + minHeight) * cosA - (J + minWidth) * sinA; 
if( (srcX >= 0) && (srcX <= m_srcWidth) &&(srcY >= 0) && (srcY <=m_srcHeight)) 

BitBlt(dcDst, J, I, 1, 1, dcSrc,(int)srcX, (int)srcY, SRCCOPY); 



::TransparentBlt(pDC->m_hDC,0,0,DstWidth*m_temp,DstHeight*m_temp,dcDst,0,0,DstWidth,DstHeight,RGB(0,0,0));
DeleteObject(m_hOldBmp);
DeleteObject(newBitmap);
DeleteDC(dcDst);
------解决方案--------------------
建议用GDI+
------解决方案--------------------
1.先在网上下ximage的dll,lib,和头文件
2.加载:
CxImage m_Img ;
CString file = "XXX.bmp" ;
m_BackBmp.Load( file ) ;
3.画:
m_BackBmp.Rotate( 90.0f ) ;
m_BackBmp.Draw( hDC, rc ) ;