Я рисовал в фотошопе стрелку - потом поворачивал её на нужный угол - и записывал. Попробуйте сделать хоть 36 образов стрелки и взяв угол с точностью 10 градусов выбрать нужный имедж для рисованя
Код
static UINT ids [12] =
{
IDI_ARROW_0G0, IDI_ARROW_0G1, IDI_ARROW_0G2, IDI_ARROW_0G3,
IDI_ARROW_0G4, IDI_ARROW_0G5, IDI_ARROW_0G6, IDI_ARROW_0G7,
IDI_ARROW_0G8, IDI_ARROW_0G9, IDI_ARROW_0G10, IDI_ARROW_0G11,
};
for (int i = 0; i < 12; ++ i)
{
arrowPoint [i] = AfxGetApp()->LoadIcon(ids [i]);
}
...
{
int iangle = ((m_iAngle - m_iOffset + FULL_CIRCLE)%(FULL_CIRCLE));
double angle = iangle / 3600 * PI * 2 / 360;
int yTarget = - (int) (radius * cos(angle) * 0.85);
int xTarget = (int) (radius * sin(angle) * 0.85);
int yTarget0 = - (int) (radius * cos(angle) * 0.1);
int xTarget0 = (int) (radius * sin(angle) * 0.1);
m_invisibleDc.SelectObject(m_darkRedPen);
m_invisibleDc.SelectObject(m_darkRedBrush);
m_invisibleDc.MoveTo(cpt.x + xTarget0, cpt.y + yTarget0);
VERIFY(m_invisibleDc.LineTo(cpt.x + xTarget, cpt.y + yTarget));
{
int zoneAngle = ((iangle + 15 * 3600) / (3600 * 30)) % 12;
ASSERT(zoneAngle < 12);
CPoint cp = CPoint(cpt.x + xTarget, cpt.y + yTarget);
VERIFY(m_invisibleDc.DrawIcon(cp.x + iconXOffset, cp.y + iconYOffset, arrowPoint [zoneAngle]));
}
}
Сообщение отредактировал Genadi Zawidowski - May 12 2009, 17:43